summaryrefslogtreecommitdiffstats
path: root/Mac/Lib
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1990-12-26 15:40:07 (GMT)
committerGuido van Rossum <guido@python.org>1990-12-26 15:40:07 (GMT)
commit217a5fa3c33ae58c1fe420f94eeb7e806961c3c1 (patch)
treeb0bdfd34e5a72346a63106565acc7622a28b2a30 /Mac/Lib
parent66a07c07a5b7b1ce7150d5c5c1a0998d062e452e (diff)
downloadcpython-217a5fa3c33ae58c1fe420f94eeb7e806961c3c1.zip
cpython-217a5fa3c33ae58c1fe420f94eeb7e806961c3c1.tar.gz
cpython-217a5fa3c33ae58c1fe420f94eeb7e806961c3c1.tar.bz2
Initial revision
Diffstat (limited to 'Mac/Lib')
-rw-r--r--Mac/Lib/maccache.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/Mac/Lib/maccache.py b/Mac/Lib/maccache.py
new file mode 100644
index 0000000..dc6502b
--- /dev/null
+++ b/Mac/Lib/maccache.py
@@ -0,0 +1,61 @@
+# 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.cat(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'