mirror of
https://github.com/rommapp/romm.git
synced 2026-02-18 23:42:07 +01:00
Introduce an asynchronous Redis instance to be used in async functions. Also, this change migrates most of the sync cache usage to the new async cache.
79 lines
2.2 KiB
Python
79 lines
2.2 KiB
Python
import sys
|
|
from enum import Enum
|
|
|
|
from config import REDIS_DB, REDIS_HOST, REDIS_PASSWORD, REDIS_PORT, REDIS_USERNAME
|
|
from logger.logger import log
|
|
from redis import Redis
|
|
from redis.asyncio import Redis as AsyncRedis
|
|
from rq import Queue
|
|
|
|
|
|
class QueuePrio(Enum):
|
|
HIGH = "high"
|
|
DEFAULT = "default"
|
|
LOW = "low"
|
|
|
|
|
|
redis_client = Redis(
|
|
host=REDIS_HOST,
|
|
port=REDIS_PORT,
|
|
password=REDIS_PASSWORD,
|
|
username=REDIS_USERNAME,
|
|
db=REDIS_DB,
|
|
)
|
|
redis_url = (
|
|
f"redis://{REDIS_USERNAME}:{REDIS_PASSWORD}@{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB}"
|
|
if REDIS_PASSWORD
|
|
else f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB}"
|
|
)
|
|
|
|
high_prio_queue = Queue(name=QueuePrio.HIGH.value, connection=redis_client)
|
|
default_queue = Queue(name=QueuePrio.DEFAULT.value, connection=redis_client)
|
|
low_prio_queue = Queue(name=QueuePrio.LOW.value, connection=redis_client)
|
|
|
|
|
|
def __get_sync_cache() -> Redis:
|
|
if "pytest" in sys.modules:
|
|
# Only import fakeredis when running tests, as it is a test dependency.
|
|
from fakeredis import FakeRedis
|
|
|
|
return FakeRedis(version=7)
|
|
|
|
log.info(f"Connecting to redis in {sys.argv[0]}...")
|
|
# A separate client that auto-decodes responses is needed
|
|
client = Redis(
|
|
host=REDIS_HOST,
|
|
port=REDIS_PORT,
|
|
password=REDIS_PASSWORD,
|
|
username=REDIS_USERNAME,
|
|
db=REDIS_DB,
|
|
decode_responses=True,
|
|
)
|
|
log.info(f"Redis connection established in {sys.argv[0]}!")
|
|
return client
|
|
|
|
|
|
def __get_async_cache() -> AsyncRedis:
|
|
if "pytest" in sys.modules:
|
|
# Only import fakeredis when running tests, as it is a test dependency.
|
|
from fakeredis import FakeAsyncRedis
|
|
|
|
return FakeAsyncRedis(version=7)
|
|
|
|
log.info(f"Connecting to redis in {sys.argv[0]}...")
|
|
# A separate client that auto-decodes responses is needed
|
|
client = AsyncRedis(
|
|
host=REDIS_HOST,
|
|
port=REDIS_PORT,
|
|
password=REDIS_PASSWORD,
|
|
username=REDIS_USERNAME,
|
|
db=REDIS_DB,
|
|
decode_responses=True,
|
|
)
|
|
log.info(f"Redis connection established in {sys.argv[0]}!")
|
|
return client
|
|
|
|
|
|
sync_cache = __get_sync_cache()
|
|
async_cache = __get_async_cache()
|