def test_decorator_typed(self): cache = self.cache() key = cachetools.keys.typedkey wrapper = cached(cache, key=key)(self.func) self.assertEqual(len(cache), 0) self.assertEqual(wrapper.__wrapped__, self.func) self.assertEqual(wrapper(0), 0) self.assertEqual(len(cache), 1) self.assertIn(cachetools.keys.typedkey(0), cache) self.assertNotIn(cachetools.keys.typedkey(1), cache) self.assertNotIn(cachetools.keys.typedkey(1.0), cache) self.assertEqual(wrapper(1), 1) self.assertEqual(len(cache), 2) self.assertIn(cachetools.keys.typedkey(0), cache) self.assertIn(cachetools.keys.typedkey(1), cache) self.assertNotIn(cachetools.keys.typedkey(1.0), cache) self.assertEqual(wrapper(1), 1) self.assertEqual(len(cache), 2) self.assertEqual(wrapper(1.0), 2) self.assertEqual(len(cache), 3) self.assertIn(cachetools.keys.typedkey(0), cache) self.assertIn(cachetools.keys.typedkey(1), cache) self.assertIn(cachetools.keys.typedkey(1.0), cache) self.assertEqual(wrapper(1.0), 2) self.assertEqual(len(cache), 3)
def test_decorator(self): cache = self.cache() wrapper = cached(cache)(self.func) self.assertEqual(len(cache), 0) self.assertEqual(wrapper.__wrapped__, self.func) self.assertEqual(wrapper(0), 0) self.assertEqual(len(cache), 1) self.assertIn(cachetools.keys.hashkey(0), cache) self.assertNotIn(cachetools.keys.hashkey(1), cache) self.assertNotIn(cachetools.keys.hashkey(1.0), cache) self.assertEqual(wrapper(1), 1) self.assertEqual(len(cache), 2) self.assertIn(cachetools.keys.hashkey(0), cache) self.assertIn(cachetools.keys.hashkey(1), cache) self.assertIn(cachetools.keys.hashkey(1.0), cache) self.assertEqual(wrapper(1), 1) self.assertEqual(len(cache), 2) self.assertEqual(wrapper(1.0), 1) self.assertEqual(len(cache), 2) self.assertEqual(wrapper(1.0), 1) self.assertEqual(len(cache), 2)
async def test_decorator_async(self): cache = self.cache() wrapper = cached(cache)(self.coro) self.assertEqual(len(cache), 0) self.assertEqual(wrapper.__wrapped__, self.coro) self.assertEqual((await wrapper(0)), 0) self.assertEqual(len(cache), 1) self.assertIn(cachetools.keys.hashkey(0), cache) self.assertNotIn(cachetools.keys.hashkey(1), cache) self.assertNotIn(cachetools.keys.hashkey(1.0), cache) self.assertEqual((await wrapper(1)), 1) self.assertEqual(len(cache), 2) self.assertIn(cachetools.keys.hashkey(0), cache) self.assertIn(cachetools.keys.hashkey(1), cache) self.assertIn(cachetools.keys.hashkey(1.0), cache) self.assertEqual((await wrapper(1)), 1) self.assertEqual(len(cache), 2) self.assertEqual((await wrapper(1.0)), 1) self.assertEqual(len(cache), 2) self.assertEqual((await wrapper(1.0)), 1) self.assertEqual(len(cache), 2)
def test_decorator_lock(self): class Lock(object): count = 0 def __enter__(self): Lock.count += 1 def __exit__(self, *exc): pass cache = self.cache() wrapper = cached(cache, lock=Lock())(self.func) self.assertEqual(len(cache), 0) self.assertEqual(wrapper.__wrapped__, self.func) self.assertEqual(wrapper(0), 0) self.assertEqual(Lock.count, 2) self.assertEqual(wrapper(1), 1) self.assertEqual(Lock.count, 4) self.assertEqual(wrapper(1), 1) self.assertEqual(Lock.count, 5)
async def test_decorator_lock_async(self): class Lock(object): count = 0 async def __aenter__(self): Lock.count += 1 async def __aexit__(self, *exc): pass cache = self.cache() wrapper = cached(cache, lock=Lock())(self.coro) self.assertEqual(len(cache), 0) self.assertEqual(wrapper.__wrapped__, self.coro) self.assertEqual((await wrapper(0)), 0) self.assertEqual(Lock.count, 2) self.assertEqual((await wrapper(1)), 1) self.assertEqual(Lock.count, 4) self.assertEqual((await wrapper(1)), 1) self.assertEqual(Lock.count, 5)