Last active
December 2, 2017 23:35
-
-
Save seliger/67311a79f142392f00bd9bf5395cc06f to your computer and use it in GitHub Desktop.
Using Redis to cache the Todoist Python API
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import todoist | |
import json | |
import redis | |
import sys | |
def _monkey_read_cache(self): | |
if not self.redis: | |
return | |
try: | |
self._update_state(json.loads(self.redis.get(self.token + '.json').decode('utf-8'))) | |
self.sync_token = self.redis.get(self.token + '.sync').decode('utf-8') | |
except AttributeError: | |
print('[WARN] - There was no data to decode (likely a cache miss).') | |
return | |
except: | |
print("Unexpected error:", sys.exc_info()[0]) | |
raise | |
def state_default(obj): | |
return obj.data | |
def _monkey_write_cache(self): | |
if not self.redis: | |
return | |
self.redis.set(self.token + '.json', json.dumps(self.state, default=state_default)) | |
self.redis.set(self.token + '.sync', self.sync_token) | |
# Inject the functions | |
todoist.TodoistAPI._read_cache = _monkey_read_cache | |
todoist.TodoistAPI._write_cache = _monkey_write_cache | |
# Inject a working Redis session into the TodoistAPI instance | |
todoist.TodoistAPI.redis = redis.StrictRedis(host="localhost", port=6379, db=0) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment