Blob Blame History Raw
From 4a99fe90f489b2bf1b73a837755bea5ad6e26879 Mon Sep 17 00:00:00 2001
From: Dan Callaghan <dcallagh@redhat.com>
Date: Wed, 7 May 2014 10:31:35 +1000
Subject: [PATCH 2/3] 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.

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.8.5.3