You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wownero-funding-system/funding/cache.py

62 lines
1.4 KiB

import json
import redis
from flask_session import RedisSessionInterface
import settings
from funding.bin.utils import json_encoder
def redis_args():
args = {
"host": settings.REDIS_HOST,
"port": settings.REDIS_PORT,
'socket_connect_timeout': 2,
'socket_timeout': 2,
'retry_on_timeout': True,
'decode_responses': True
}
if settings.REDIS_PASSWD:
args["password"] = settings.REDIS_PASSWD
return args
class JsonRedisSerializer:
@staticmethod
def loads(val):
try:
return json.loads(val).get("wow", {})
except ValueError:
return
@staticmethod
def dumps(val):
try:
return json.dumps({"wow": val})
except ValueError:
return
class JsonRedis(RedisSessionInterface):
serializer = JsonRedisSerializer
def __init__(self, key_prefix, use_signer=False, decode_responses=True):
super(JsonRedis, self).__init__(
redis=redis.Redis(**redis_args()),
key_prefix=key_prefix,
use_signer=use_signer)
class WowCache:
def __init__(self):
self._cache = redis.StrictRedis(**redis_args())
def get(self, key):
try:
return json.loads(self._cache.get(key))
except:
return {}
def set(self, key: str, data: dict, expiry = 300):
self._cache.set(key, json.dumps(data, default=json_encoder), ex=expiry)