Add RedisCacheHandler (#747)

* add RedisCacheHandler

* add the explanation for customized chache handlers

* update the dependency and chengelog
This commit is contained in:
Takehisa Oyama authored and GitHub committed 2021-11-22 19:31:58 +00:00
1 parent 0a9270f385
commit 7d23fc3277
4 files changed
+45 -2

No files matched your search

+37 -1
View File
@@ -1,4 +1,9 @@
__all__ = ['CacheHandler', 'CacheFileHandler', 'DjangoSessionCacheHandler', 'MemoryCacheHandler']
__all__ = [
'CacheHandler',
'CacheFileHandler',
'DjangoSessionCacheHandler',
'MemoryCacheHandler',
'RedisCacheHandler']
import errno
import json
@@ -6,6 +11,8 @@ import logging
import os
from spotipy.util import CLIENT_CREDS_ENV_VARS
from redis import RedisError
logger = logging.getLogger(__name__)
@@ -138,3 +145,32 @@ class DjangoSessionCacheHandler(CacheHandler):
self.request.session['token_info'] = token_info
except Exception as e:
logger.warning("Error saving token to cache: " + str(e))
class RedisCacheHandler(CacheHandler):
"""
A cache handler that stores the token info in the Redis.
"""
def __init__(self, redis):
"""
Parameters:
* redis: Redis object provided by redis-py library
(https://github.com/redis/redis-py)
"""
self.redis = redis
def get_cached_token(self):
token_info = None
try:
token_info = json.loads(self.redis.get('token_info'))
except RedisError as e:
logger.warning('Error getting token from cache: ' + str(e))
return token_info
def save_token_to_cache(self, token_info):
try:
self.redis.set('token_info', json.dumps(token_info))
except RedisError as e:
logger.warning('Error saving token to cache: ' + str(e))