| # Module 'maccache' |
| # |
| # Maintain a cache of listdir(), isdir(), isfile() or exists() outcomes. |
| |
| import mac |
| import macpath |
| |
| |
| # The cache. |
| # Keys are absolute pathnames; |
| # values are 0 (nothing), 1 (file) or [...] (dir). |
| # |
| cache = {} |
| |
| |
| # Current working directory. |
| # |
| cwd = mac.getcwd() |
| |
| |
| # Constants. |
| # |
| NONE = 0 |
| FILE = 1 |
| LISTTYPE = type([]) |
| |
| def _stat(name): |
| name = macpath.join(cwd, name) |
| if cache.has_key(name): |
| return cache[name] |
| if macpath.isfile(name): |
| cache[name] = FILE |
| return FILE |
| try: |
| list = mac.listdir(name) |
| except: |
| cache[name] = NONE |
| return NONE |
| cache[name] = list |
| if name[-1:] = ':': cache[name[:-1]] = list |
| else: cache[name+':'] = list |
| return list |
| |
| def isdir(name): |
| st = _stat(name) |
| return type(st) = LISTTYPE |
| |
| def isfile(name): |
| st = _stat(name) |
| return st = FILE |
| |
| def exists(name): |
| st = _stat(name) |
| return st <> NONE |
| |
| def listdir(name): |
| st = _stat(name) |
| if type(st) = LISTTYPE: |
| return st |
| else: |
| raise RuntimeError, 'list non-directory' |