# Module 'maccache' # # Maintain a cache of listdir(), isdir(), isfile() or exists() outcomes. # XXX Should merge with module statcache import os # The cache. # Keys are absolute pathnames; # values are 0 (nothing), 1 (file) or [...] (dir). # cache = {} # Current working directory. # cwd = os.getcwd() # Constants. # NONE = 0 FILE = 1 LISTTYPE = type([]) def _stat(name): name = os.path.join(cwd, name) if cache.has_key(name): return cache[name] if os.path.isfile(name): cache[name] = FILE return FILE try: list = os.listdir(name) except: cache[name] = NONE return NONE cache[name] = list if name[-1:] == ':': cache[name[:-1]] = list else: cache[name+':'] = list return list def isdir(name): st = _stat(name) return type(st) == LISTTYPE def isfile(name): st = _stat(name) return st == FILE def exists(name): st = _stat(name) return st <> NONE def listdir(name): st = _stat(name) if type(st) == LISTTYPE: return st else: raise RuntimeError, 'list non-directory'