from celery import shared_task @shared_task(name="cms.scan_media_asset") def scan_media_asset_task(asset_id: str): """ Async media scan hook. Marks the asset CLEAN by default. Replace the body with a real AV scanner call (e.g., ClamAV) when available. """ from .models import MediaAsset, ScanStatus try: asset = MediaAsset.objects.get(pk=asset_id) except MediaAsset.DoesNotExist: return {"error": "not found"} # Stub: always mark clean — replace with real AV integration asset.scan_status = ScanStatus.CLEAN asset.save(update_fields=["scan_status"]) return {"asset_id": asset_id, "scan_status": "clean"}