itools.py (1887B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\devtools\script\itools.py 2 from future.utils import raise_ 3 revision = 5 4 import os 5 import types 6 7 def relpath(target, base = os.curdir): 8 if not os.path.exists(target): 9 raise_(OSError, 'Target does not exist: ' + target) 10 if not os.path.isdir(base): 11 raise_(OSError, 'Base is not a directory or does not exist: ' + base) 12 base_list = os.path.abspath(base).split(os.sep) 13 target_list = os.path.abspath(target).split(os.sep) 14 if base_list[0].lower() != target_list[0].lower(): 15 raise_(OSError, 'Target is on a different drive to base. Target: ' + target_list[0].lower() + ', base: ' + base_list[0].lower()) 16 for i in range(min(len(base_list), len(target_list))): 17 if base_list[i].lower() != target_list[i].lower(): 18 break 19 else: 20 i += 1 21 22 rel_list = [os.pardir] * (len(base_list) - i) + target_list[i:] 23 return os.path.join(*rel_list) 24 25 26 def walktree(dir, filecallback, dircallback = None, recursive = True): 27 files = os.listdir(dir) 28 for file in files: 29 entry = os.path.join(dir, file) 30 if os.path.isdir(entry): 31 if recursive: 32 walktree(entry, filecallback, dircallback) 33 elif callable(filecallback): 34 filecallback(entry) 35 36 if callable(dircallback): 37 dircallback(dir) 38 39 40 def itertree(dir, files = True, dirs = False, recursive = True): 41 files = os.listdir(dir) 42 for file in files: 43 entry = os.path.join(dir, file) 44 if os.path.isdir(entry): 45 if recursive: 46 for x in itertree(entry, files, dirs): 47 yield x 48 49 if dirs: 50 yield (1, entry) 51 elif files: 52 yield (0, entry) 53 54 55 def listify(arg): 56 if type(arg) != types.ListType: 57 return [arg] 58 return arg