home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pyos2bin.zip / Lib / statcache.py < prev    next >
Text File  |  1995-12-07  |  2KB  |  83 lines

  1. # Module 'statcache'
  2. #
  3. # Maintain a cache of file stats.
  4. # There are functions to reset the cache or to selectively remove items.
  5.  
  6. import os
  7. from stat import *
  8.  
  9. # The cache.
  10. # Keys are pathnames, values are `os.stat' outcomes.
  11. #
  12. cache = {}
  13.  
  14.  
  15. # Stat a file, possibly out of the cache.
  16. #
  17. def stat(path):
  18.     if cache.has_key(path):
  19.         return cache[path]
  20.     cache[path] = ret = os.stat(path)
  21.     return ret
  22.  
  23.  
  24. # Reset the cache completely.
  25. #
  26. def reset():
  27.     global cache
  28.     cache = {}
  29.  
  30.  
  31. # Remove a given item from the cache, if it exists.
  32. #
  33. def forget(path):
  34.     if cache.has_key(path):
  35.         del cache[path]
  36.  
  37.  
  38. # Remove all pathnames with a given prefix.
  39. #
  40. def forget_prefix(prefix):
  41.     n = len(prefix)
  42.     for path in cache.keys():
  43.         if path[:n] == prefix:
  44.             del cache[path]
  45.  
  46.  
  47. # Forget about a directory and all entries in it, but not about
  48. # entries in subdirectories.
  49. #
  50. def forget_dir(prefix):
  51.     if prefix[-1:] == '/' and prefix <> '/':
  52.         prefix = prefix[:-1]
  53.     forget(prefix)
  54.     if prefix[-1:] <> '/':
  55.         prefix = prefix + '/'
  56.     n = len(prefix)
  57.     for path in cache.keys():
  58.         if path[:n] == prefix:
  59.             rest = path[n:]
  60.             if rest[-1:] == '/': rest = rest[:-1]
  61.             if '/' not in rest:
  62.                 del cache[path]
  63.  
  64.  
  65. # Remove all pathnames except with a given prefix.
  66. # Normally used with prefix = '/' after a chdir().
  67. #
  68. def forget_except_prefix(prefix):
  69.     n = len(prefix)
  70.     for path in cache.keys():
  71.         if path[:n] <> prefix:
  72.             del cache[path]
  73.  
  74.  
  75. # Check for directory.
  76. #
  77. def isdir(path):
  78.     try:
  79.         st = stat(path)
  80.     except os.error:
  81.         return 0
  82.     return S_ISDIR(st[ST_MODE])
  83.