Mercurial > cpython-lru_cache-weakref
view Lib/statcache.py @ 15946:4f621708514b legacy-trunk
Rich comparisons fall-out:
- Get rid of long_cmp().
- Renamed Py_TPFLAGS_NEWSTYLENUMBER to Py_TPFLAGS_CHECKTYPES.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Wed, 17 Jan 2001 15:33:18 +0000 |
| parents | 3685ef2a55a4 |
| children | 861bf8dcfb58 |
line wrap: on
line source
"""Maintain a cache of stat() information on files. There are functions to reset the cache or to selectively remove items. """ import os from stat import * # The cache. # Keys are pathnames, values are `os.stat' outcomes. # cache = {} def stat(path): """Stat a file, possibly out of the cache.""" if cache.has_key(path): return cache[path] cache[path] = ret = os.stat(path) return ret def reset(): """Reset the cache completely.""" global cache cache = {} def forget(path): """Remove a given item from the cache, if it exists.""" if cache.has_key(path): del cache[path] def forget_prefix(prefix): """Remove all pathnames with a given prefix.""" n = len(prefix) for path in cache.keys(): if path[:n] == prefix: del cache[path] def forget_dir(prefix): """Forget about a directory and all entries in it, but not about entries in subdirectories.""" if prefix[-1:] == '/' and prefix != '/': prefix = prefix[:-1] forget(prefix) if prefix[-1:] != '/': prefix = prefix + '/' n = len(prefix) for path in cache.keys(): if path[:n] == prefix: rest = path[n:] if rest[-1:] == '/': rest = rest[:-1] if '/' not in rest: del cache[path] def forget_except_prefix(prefix): """Remove all pathnames except with a given prefix. Normally used with prefix = '/' after a chdir().""" n = len(prefix) for path in cache.keys(): if path[:n] != prefix: del cache[path] def isdir(path): """Check for directory.""" try: st = stat(path) except os.error: return 0 return S_ISDIR(st[ST_MODE])
