# Module 'maccache' # # Maintain a cache of listdir(), isdir(), isfile() or exists() outcomes. import mac import macpath # The cache. # Keys are absolute pathnames; # values are 0 (nothing), 1 (file) or [...] (dir). # cache = {} # Current working directory. # cwd = mac.getcwd() # Constants. # NONE = 0 FILE = 1 LISTTYPE = type([]) def _stat(name): name = macpath.join(cwd, name) if cache.has_key(name): return cache[name] if macpath.isfile(name): cache[name] = FILE return FILE try: list = mac.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'