Blob Blame History Raw
From 076b3b8cbf746246e817683f54439a1ff7af6d2b Mon Sep 17 00:00:00 2001
From: Dan Callaghan <dcallagh@redhat.com>
Date: Wed, 7 May 2014 10:31:35 +1000
Subject: [PATCH 06/14] Avoid an extra stat() call on cache lookups

Currently each cache lookup does stat() followed by open(). We can just
handle ENOENT from open() instead.

(cherry picked from commit 48c132bff387056ab311e40db6ba6bae51d95277)

diff --git a/src/webassets/cache.py b/src/webassets/cache.py
index 36d77ff..d1245e6 100644
--- a/src/webassets/cache.py
+++ b/src/webassets/cache.py
@@ -15,6 +15,7 @@ also serve in other places.
 
 import os
 from os import path
+import errno
 from webassets import six
 from webassets.merge import BaseHunk
 from webassets.filter import Filter, freezedicts
@@ -171,9 +172,12 @@ class FilesystemCache(BaseCache):
 
     def get(self, key):
         filename = path.join(self.directory, '%s' % make_md5(self.V, key))
-        if not path.exists(filename):
+        try:
+            f = open(filename, 'rb')
+        except IOError as e:
+            if e.errno != errno.ENOENT:
+                raise
             return None
-        f = open(filename, 'rb')
         try:
             result = f.read()
         finally:
-- 
1.9.3