from contextlib import asynccontextmanager from entity import Queue from framework import Redis class QueueManager: def __init__(self, redis: Redis) -> None: self.redis = redis self.queues: dict[int, Queue] = {} @asynccontextmanager async def __call__(self, guildId: int) -> Queue: # await self.acquire(guildId) queue = await self.get(guildId) yield queue await self.save(guildId) # await self.release(guildId) async def acquire(self, guildId: int) -> None: await self.redis.acquire(guildId) async def release(self, guildId: int) -> None: await self.redis.release(guildId) async def get(self, guildId: int) -> Queue: queue: Queue | None = await self.redis.get(guildId) if queue is None: queue = Queue() self.queues[guildId] = queue return self.queues[guildId] async def save(self, guildId: int) -> None: await self.redis.set(guildId, self.queues[guildId])