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