62 lines
1008 B
Python
62 lines
1008 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'
|