dircache.py revision 83760d213fb3bec7b4117d266fcfbf6fe2ba14ab
183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh"""Read and cache directory listings. 283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew HsiehThe listdir() routine returns a sorted list of the files in a directory, 483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehusing a cache to avoid reading the directory more often than necessary. 583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew HsiehThe annotate() routine appends slashes to directories.""" 683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom warnings import warnpy3k 783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehwarnpy3k("the dircache module has been removed in Python 3.0", stacklevel=2) 883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdel warnpy3k 983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport os 1183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh__all__ = ["listdir", "opendir", "annotate", "reset"] 1383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehcache = {} 1583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef reset(): 1783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """Reset the cache completely.""" 1883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh global cache 1983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh cache = {} 2083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 2183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef listdir(path): 2283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """List directory contents, using cache.""" 2383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh try: 2483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh cached_mtime, list = cache[path] 2583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh del cache[path] 2683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh except KeyError: 2783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh cached_mtime, list = -1, [] 2883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh mtime = os.stat(path).st_mtime 2983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if mtime != cached_mtime: 3083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh list = os.listdir(path) 3183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh list.sort() 3283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh cache[path] = mtime, list 3383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return list 3483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehopendir = listdir # XXX backward compatibility 3683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef annotate(head, list): 3883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """Add '/' suffixes to directories.""" 3983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for i in range(len(list)): 4083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if os.path.isdir(os.path.join(head, list[i])): 4183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh list[i] = list[i] + '/' 42