more thread safety in LRUCache
--HG--
branch : trunk
diff --git a/jinja2/utils.py b/jinja2/utils.py
index 9d46639..529abd2 100644
--- a/jinja2/utils.py
+++ b/jinja2/utils.py
@@ -465,12 +465,36 @@
finally:
self._wlock.release()
- def __iter__(self):
- """Iterate over all values in the cache dict, ordered by
+ def items(self):
+ """Return a list of items."""
+ result = [(key, self._mapping[key]) for key in list(self._queue)]
+ result.reverse()
+ return result
+
+ def iteritems(self):
+ """Iterate over all items."""
+ return iter(self.items())
+
+ def values(self):
+ """Return a list of all values."""
+ return [x[1] for x in self.items()]
+
+ def itervalue(self):
+ """Iterate over all values."""
+ return iter(self.values())
+
+ def keys(self):
+ """Return a list of all keys ordered by most recent usage."""
+ return list(self)
+
+ def iterkeys(self):
+ """Iterate over all keys in the cache dict, ordered by
the most recent usage.
"""
return reversed(tuple(self._queue))
+ __iter__ = iterkeys
+
def __reversed__(self):
"""Iterate over the values in the cache dict, oldest items
coming first.