A Really! Small! Cache! for python 2 and 3.
Working on a totally separate project, I found myself wanting to use funcy.memoize...a lot. There was a major problem, though: I couldn't test with it. There was no (obvious) way to turn it off. It was making me crazy, so I spent a few hours writing a small module (even smaller than this, originally) to suit the memoization needs, with a hook to turn it off for testing. When I got to the end of my feature sprint for that project, I decided it made more sense to spin it out into its own project, so here we are!
- Simple upsert and get workflow
- TTLs for expiring cache items
- Decorator for "memoization"
- Enabling and disabling functionality, including a context manager
- Work directly on the imported module... no additional instantiation (unless you want to)
pip install microcache
>>> import microcache >>> microcache.has('key') False >>> microcache.get('key') CACHE_MISS >>> microcache.get('key', default='default') 'default' >>> microcache.upsert('key', 'value') >>> microcache.get('key') 'value' >>> microcache.disable() >>> microcache.get('key') CACHE_DISABLED
Decorator and context manager
import microcache import time @microcache.this def somefunc(): time.sleep(5) return "this will be cached, and you won't have to wait a second time!" def test_somefunc(): somefunc() somefunc() with microcache.temporarily_disabled(): # now we'll have to wait again somefunc()