PixelForge / imageforge /backend /app /storage /maintenance.py
Gregorfun's picture
Initial commit
32c5da4
from __future__ import annotations
from datetime import datetime, timedelta, timezone
from pathlib import Path
from ..core.config import OUTPUT_DIR
def cleanup_outputs(retention_days: int) -> int:
if retention_days <= 0:
return 0
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
cutoff = datetime.now(timezone.utc) - timedelta(days=retention_days)
removed = 0
for item in OUTPUT_DIR.iterdir():
if not item.is_dir():
continue
dt = _parse_date(item.name)
if dt and dt < cutoff:
_remove_tree(item)
removed += 1
return removed
def _parse_date(name: str) -> datetime | None:
try:
return datetime.strptime(name, "%Y-%m-%d").replace(tzinfo=timezone.utc)
except ValueError:
return None
def _remove_tree(path: Path) -> None:
for child in path.glob("**/*"):
if child.is_file():
child.unlink(missing_ok=True)
for child in sorted(path.glob("**/*"), reverse=True):
if child.is_dir():
child.rmdir()
path.rmdir()