• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"""Read and cache directory listings.
2
3The listdir() routine returns a sorted list of the files in a directory,
4using a cache to avoid reading the directory more often than necessary.
5The annotate() routine appends slashes to directories."""
6from warnings import warnpy3k
7warnpy3k("the dircache module has been removed in Python 3.0", stacklevel=2)
8del warnpy3k
9
10import os
11
12__all__ = ["listdir", "opendir", "annotate", "reset"]
13
14cache = {}
15
16def reset():
17    """Reset the cache completely."""
18    global cache
19    cache = {}
20
21def listdir(path):
22    """List directory contents, using cache."""
23    try:
24        cached_mtime, list = cache[path]
25        del cache[path]
26    except KeyError:
27        cached_mtime, list = -1, []
28    mtime = os.stat(path).st_mtime
29    if mtime != cached_mtime:
30        list = os.listdir(path)
31        list.sort()
32    cache[path] = mtime, list
33    return list
34
35opendir = listdir # XXX backward compatibility
36
37def annotate(head, list):
38    """Add '/' suffixes to directories."""
39    for i in range(len(list)):
40        if os.path.isdir(os.path.join(head, list[i])):
41            list[i] = list[i] + '/'
42