home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pyth_os2.zip / python-1.0.2 / Lib / maccache.py < prev    next >
Text File  |  1993-12-29  |  1KB  |  62 lines

  1. # Module 'maccache'
  2. #
  3. # Maintain a cache of listdir(), isdir(), isfile() or exists() outcomes.
  4. # XXX Should merge with module statcache
  5.  
  6. import os
  7.  
  8.  
  9. # The cache.
  10. # Keys are absolute pathnames;
  11. # values are 0 (nothing), 1 (file) or [...] (dir).
  12. #
  13. cache = {}
  14.  
  15.  
  16. # Current working directory.
  17. #
  18. cwd = os.getcwd()
  19.  
  20.  
  21. # Constants.
  22. #
  23. NONE = 0
  24. FILE = 1
  25. LISTTYPE = type([])
  26.  
  27. def _stat(name):
  28.     name = os.path.join(cwd, name)
  29.     if cache.has_key(name):
  30.         return cache[name]
  31.     if os.path.isfile(name):
  32.         cache[name] = FILE
  33.         return FILE
  34.     try:
  35.         list = os.listdir(name)
  36.     except:
  37.         cache[name] = NONE
  38.         return NONE
  39.     cache[name] = list
  40.     if name[-1:] == ':': cache[name[:-1]] = list
  41.     else: cache[name+':'] = list
  42.     return list
  43.  
  44. def isdir(name):
  45.     st = _stat(name)
  46.     return type(st) == LISTTYPE
  47.  
  48. def isfile(name):
  49.     st = _stat(name)
  50.     return st == FILE
  51.  
  52. def exists(name):
  53.     st = _stat(name)
  54.     return st <> NONE
  55.  
  56. def listdir(name):
  57.     st = _stat(name)
  58.     if type(st) == LISTTYPE:
  59.         return st
  60.     else:
  61.         raise RuntimeError, 'list non-directory'
  62.