diff -r b758351d191f -r cc9b7e14412b web/lib/django/core/cache/backends/filebased.py --- 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