Show More
@@ -1337,6 +1337,20 b' class lrucachedict(object):' | |||
|
1337 | 1337 | except KeyError: |
|
1338 | 1338 | return default |
|
1339 | 1339 | |
|
1340 | def peek(self, k, default=_notset): | |
|
1341 | """Get the specified item without moving it to the head | |
|
1342 | ||
|
1343 | Unlike get(), this doesn't mutate the internal state. But be aware | |
|
1344 | that it doesn't mean peek() is thread safe. | |
|
1345 | """ | |
|
1346 | try: | |
|
1347 | node = self._cache[k] | |
|
1348 | return node.value | |
|
1349 | except KeyError: | |
|
1350 | if default is _notset: | |
|
1351 | raise | |
|
1352 | return default | |
|
1353 | ||
|
1340 | 1354 | def clear(self): |
|
1341 | 1355 | n = self._head |
|
1342 | 1356 | while n.key is not _notset: |
@@ -79,6 +79,21 b' class testlrucachedict(unittest.TestCase' | |||
|
79 | 79 | self.assertEqual(d.get('a'), 'va') |
|
80 | 80 | self.assertEqual(list(d), ['a', 'c', 'b']) |
|
81 | 81 | |
|
82 | def testpeek(self): | |
|
83 | d = util.lrucachedict(4) | |
|
84 | d['a'] = 'va' | |
|
85 | d['b'] = 'vb' | |
|
86 | d['c'] = 'vc' | |
|
87 | ||
|
88 | with self.assertRaises(KeyError): | |
|
89 | d.peek('missing') | |
|
90 | self.assertEqual(list(d), ['c', 'b', 'a']) | |
|
91 | self.assertIsNone(d.peek('missing', None)) | |
|
92 | self.assertEqual(list(d), ['c', 'b', 'a']) | |
|
93 | ||
|
94 | self.assertEqual(d.peek('a'), 'va') | |
|
95 | self.assertEqual(list(d), ['c', 'b', 'a']) | |
|
96 | ||
|
82 | 97 | def testcopypartial(self): |
|
83 | 98 | d = util.lrucachedict(4) |
|
84 | 99 | d.insert('a', 'va', cost=4) |
General Comments 0
You need to be logged in to leave comments.
Login now