--- a/web/lib/django/core/cache/backends/filebased.py Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/cache/backends/filebased.py Tue May 25 02:43:45 2010 +0200
@@ -2,6 +2,7 @@
import os
import time
+import shutil
try:
import cPickle as pickle
except ImportError:
@@ -41,13 +42,15 @@
fname = self._key_to_file(key)
try:
f = open(fname, 'rb')
- exp = pickle.load(f)
- now = time.time()
- if exp < now:
+ try:
+ exp = pickle.load(f)
+ now = time.time()
+ if exp < now:
+ self._delete(fname)
+ else:
+ return pickle.load(f)
+ finally:
f.close()
- self._delete(fname)
- else:
- return pickle.load(f)
except (IOError, OSError, EOFError, pickle.PickleError):
pass
return default
@@ -66,9 +69,12 @@
os.makedirs(dirname)
f = open(fname, 'wb')
- now = time.time()
- pickle.dump(now + timeout, f, pickle.HIGHEST_PROTOCOL)
- pickle.dump(value, f, pickle.HIGHEST_PROTOCOL)
+ try:
+ now = time.time()
+ pickle.dump(now + timeout, f, pickle.HIGHEST_PROTOCOL)
+ pickle.dump(value, f, pickle.HIGHEST_PROTOCOL)
+ finally:
+ f.close()
except (IOError, OSError):
pass
@@ -92,14 +98,16 @@
fname = self._key_to_file(key)
try:
f = open(fname, 'rb')
- exp = pickle.load(f)
- now = time.time()
- if exp < now:
+ try:
+ exp = pickle.load(f)
+ now = time.time()
+ if exp < now:
+ self._delete(fname)
+ return False
+ else:
+ return True
+ finally:
f.close()
- self._delete(fname)
- return False
- else:
- return True
except (IOError, OSError, EOFError, pickle.PickleError):
return False
@@ -129,7 +137,7 @@
try:
os.makedirs(self._dir)
except OSError:
- raise EnvironmentError, "Cache directory '%s' does not exist and could not be created'" % self._dir
+ raise EnvironmentError("Cache directory '%s' does not exist and could not be created'" % self._dir)
def _key_to_file(self, key):
"""
@@ -150,3 +158,9 @@
count += len(files)
return count
_num_entries = property(_get_num_entries)
+
+ def clear(self):
+ try:
+ shutil.rmtree(self._dir)
+ except (IOError, OSError):
+ pass