mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			61 lines
		
	
	
	
		
			1,008 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1,008 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| # 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'
 | 
