| # 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' |