initial commit

This commit is contained in:
TheOnlyMace
2026-06-18 23:45:08 +02:00
commit 7ba9687619
96 changed files with 4309 additions and 0 deletions

57
api/app/cache.py Normal file
View File

@@ -0,0 +1,57 @@
from __future__ import annotations
import json
import logging
from typing import Any
import redis.asyncio as redis
from app.config import REDIS_URL
logger = logging.getLogger(__name__)
_client: redis.Redis | None = None
async def init_redis() -> None:
global _client
try:
_client = redis.from_url(REDIS_URL, decode_responses=True)
await _client.ping()
logger.info("Redis connected")
except Exception as exc:
logger.warning("Redis unavailable, running without Redis cache: %s", exc)
_client = None
async def close_redis() -> None:
global _client
if _client is not None:
await _client.aclose()
_client = None
def redis_available() -> bool:
return _client is not None
async def cache_get(key: str) -> Any | None:
if _client is None:
return None
raw = await _client.get(key)
if raw is None:
return None
try:
return json.loads(raw)
except json.JSONDecodeError:
return raw
async def cache_set(key: str, value: Any, ttl_seconds: int) -> None:
if _client is None:
return
await _client.set(key, json.dumps(value), ex=ttl_seconds)
async def flush_cache() -> None:
if _client is not None:
await _client.flushdb()