PaiGram/core/services/wiki/cache.py

42 lines
1.2 KiB
Python
Raw Permalink Normal View History

from core.base_service import BaseService
from core.dependence.redisdb import RedisDB
from modules.wiki.base import Model
2022-07-26 10:07:31 +00:00
try:
import ujson as jsonlib
except ImportError:
import json as jsonlib
__all__ = ["WikiCache"]
2022-07-26 10:07:31 +00:00
class WikiCache(BaseService.Component):
2022-07-26 10:07:31 +00:00
def __init__(self, redis: RedisDB):
self.client = redis.client
self.qname = "wiki"
async def set(self, key: str, value):
qname = f"{self.qname}:{key}"
if isinstance(value, Model):
value = value.json()
elif isinstance(value, (dict, list)):
value = jsonlib.dumps(value)
await self.client.set(qname, value)
2022-07-26 10:07:31 +00:00
async def delete(self, key: str):
qname = f"{self.qname}:{key}"
2022-07-26 10:07:31 +00:00
await self.client.delete(qname)
async def get(self, key: str) -> dict:
qname = f"{self.qname}:{key}"
# noinspection PyBroadException
try:
result = jsonlib.loads(await self.client.get(qname))
2022-10-11 06:45:07 +00:00
except Exception: # pylint: disable=W0703
result = []
if isinstance(result, list) and len(result) > 0:
for num, item in enumerate(result):
result[num] = jsonlib.loads(item)
return result