mirror of
https://github.com/python/cpython.git
synced 2024-12-01 22:04:04 +08:00
4b8c6eaf8b
*this* set of patches is Ka-Ping's final sweep: The attached patches update the standard library so that all modules have docstrings beginning with one-line summaries. A new docstring was added to formatter. The docstring for os.py was updated to mention nt, os2, ce in addition to posix, dos, mac.
76 lines
1.5 KiB
Python
76 lines
1.5 KiB
Python
"""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])
|