kv-netflix/backend/routers/admin.py

63 lines
1.8 KiB
Python

"""
Admin Router
Version management and system updates
"""
import asyncio
from fastapi import APIRouter, Depends
from security import verify_hmac
from logging_config import get_logger
logger = get_logger("admin")
router = APIRouter(prefix="/api/admin", tags=["admin"])
@router.get("/version")
async def get_versions(authorized: bool = Depends(verify_hmac)):
"""Get versions of all managed dependencies"""
from auto_updater import get_all_versions
loop = asyncio.get_event_loop()
versions = await loop.run_in_executor(None, get_all_versions)
logger.info("Retrieved package versions")
return {
"status": "ok",
"versions": versions
}
@router.post("/update")
async def trigger_update(
package: str = None,
authorized: bool = Depends(verify_hmac)
):
"""
Trigger manual update of dependencies
Args:
package: Specific package to update (yt-dlp, playwright, all)
If not specified, updates all packages
"""
from auto_updater import update_yt_dlp, update_playwright, update_all_dependencies
loop = asyncio.get_event_loop()
if package == "yt-dlp":
logger.info("Updating yt-dlp")
success, msg = await loop.run_in_executor(None, update_yt_dlp)
return {"package": "yt-dlp", "success": success, "message": msg}
elif package == "playwright":
logger.info("Updating playwright")
success, msg = await loop.run_in_executor(None, update_playwright)
return {"package": "playwright", "success": success, "message": msg}
else:
logger.info("Updating all dependencies")
results = await loop.run_in_executor(None, update_all_dependencies)
return {
"status": "completed",
"results": {pkg: {"success": s, "message": m} for pkg, (s, m) in results.items()}
}