mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +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'
 |