Added support for all Redis versions (>=1.0.0)

Previously support was provided for Redis>=6.2.0
This commit is contained in:
Ivan Golikov 2025-01-08 21:44:41 +01:00
parent f8a67e5fbd
commit 869bfc45ac
4 changed files with 84 additions and 3 deletions

View file

@ -1,7 +1,10 @@
from functools import lru_cache
from uuid import uuid4
from cryptography.fernet import Fernet
from redis.asyncio import Redis
from redis.exceptions import ResponseError
from redis.typing import ResponseT
from pssecret_server.models import Secret
@ -30,3 +33,26 @@ async def save_secret(data: Secret, redis: Redis) -> str:
await redis.setex(new_key, 60 * 60 * 24, data.data)
return new_key
@lru_cache
async def _is_getdel_available(redis: Redis) -> bool:
"""GETDEL is not available in Redis prior to version 6.2"""
try:
await redis.getdel("test:getdel:availability")
except ResponseError:
return False
return True
async def getdel(redis: Redis, key: str) -> ResponseT:
result: ResponseT
if await _is_getdel_available(redis):
result = await redis.getdel(key)
else:
result = await redis.getset(key, "")
await redis.delete(key)
return result