forked from cartsnitch/cartsnitch
feat(api): implement lifespan with DB and Redis connection pooling
- Refactor database.py to use init_db()/close_db() lifecycle - Add create_db_engine() with pool_size=10, max_overflow=20, pool_pre_ping=True - Replace cache.py stub with real Redis client using redis.asyncio - Implement init_redis()/close_redis() with graceful error handling - Replace no-op lifespan in main.py with proper startup/shutdown - Enhance health endpoint to check DB and Redis connectivity - Add tests for database, cache, and health endpoint lifecycle Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
committed by
savannah-savings-cto[bot]
parent
f96daceb0f
commit
2460a00d4e
@@ -1,9 +1,41 @@
|
||||
"""Redis/DragonflyDB caching helpers."""
|
||||
|
||||
import logging
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
import redis.asyncio as redis
|
||||
from redis.asyncio import Redis
|
||||
|
||||
from cartsnitch_api.config import settings
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from cartsnitch_api.config import Settings
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
_redis: "Redis | None" = None
|
||||
|
||||
|
||||
def get_settings() -> "Settings":
|
||||
return settings
|
||||
|
||||
|
||||
async def init_redis() -> None:
|
||||
global _redis
|
||||
_redis = redis.from_url(settings.redis_url)
|
||||
await _redis.ping()
|
||||
|
||||
|
||||
async def close_redis() -> None:
|
||||
global _redis
|
||||
if _redis is not None:
|
||||
await _redis.aclose()
|
||||
_redis = None
|
||||
|
||||
|
||||
def get_redis() -> Redis | None:
|
||||
return _redis
|
||||
|
||||
|
||||
class CacheClient:
|
||||
"""Redis/DragonflyDB caching with connection pooling.
|
||||
|
||||
Reference in New Issue
Block a user