Fix three PyChecker-detected gotchas.
[python/dscho.git] / Mac / Lib / maccache.py
blob1e2b3d02b171a65a9a616ea034b2e4905305f484
1 # Module 'maccache'
3 # Maintain a cache of listdir(), isdir(), isfile() or exists() outcomes.
4 # XXX Should merge with module statcache
6 import os
9 # The cache.
10 # Keys are absolute pathnames;
11 # values are 0 (nothing), 1 (file) or [...] (dir).
13 cache = {}
16 # Current working directory.
18 cwd = os.getcwd()
21 # Constants.
23 NONE = 0
24 FILE = 1
25 LISTTYPE = type([])
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
44 def isdir(name):
45 st = _stat(name)
46 return type(st) == LISTTYPE
48 def isfile(name):
49 st = _stat(name)
50 return st == FILE
52 def exists(name):
53 st = _stat(name)
54 return st <> NONE
56 def listdir(name):
57 st = _stat(name)
58 if type(st) == LISTTYPE:
59 return st
60 else:
61 raise RuntimeError, 'list non-directory'