"""Read and cache directory listings. | |
The listdir() routine returns a sorted list of the files in a directory, | |
using a cache to avoid reading the directory more often than necessary. | |
The annotate() routine appends slashes to directories.""" | |
from warnings import warnpy3k | |
warnpy3k("the dircache module has been removed in Python 3.0", stacklevel=2) | |
del warnpy3k | |
import os | |
__all__ = ["listdir", "opendir", "annotate", "reset"] | |
cache = {} | |
def reset(): | |
"""Reset the cache completely.""" | |
global cache | |
cache = {} | |
def listdir(path): | |
"""List directory contents, using cache.""" | |
try: | |
cached_mtime, list = cache[path] | |
del cache[path] | |
except KeyError: | |
cached_mtime, list = -1, [] | |
mtime = os.stat(path).st_mtime | |
if mtime != cached_mtime: | |
list = os.listdir(path) | |
list.sort() | |
cache[path] = mtime, list | |
return list | |
opendir = listdir # XXX backward compatibility | |
def annotate(head, list): | |
"""Add '/' suffixes to directories.""" | |
for i in range(len(list)): | |
if os.path.isdir(os.path.join(head, list[i])): | |
list[i] = list[i] + '/' |