gnm_deliverables/tasks.py (32 lines of code) (raw):
import logging
from celery.decorators import periodic_task
from celery.schedules import crontab
from django.conf import settings
from django.contrib.auth.models import User
from .choices import DELIVERABLE_ASSET_STATUS_INGESTED
from .models import DeliverableAsset
logger = logging.getLogger(__name__)
def init_raven():
try:
from raven import Client as RavenClient
from django.conf import settings
raven_client = RavenClient(settings.RAVEN_CONFIG['dsn'])
return raven_client
except Exception as e:
logger.error("Unable to initialise Sentry: {0}".format(e))
return None
@periodic_task(run_every=crontab())
def remove_stale_files():
"""
Remove files from disk for deliverable assets after they are ingested.
IMPORTANT: Make sure write permissions exists for the directories created for deliverables for the user running
celery.
:return:
"""
raven_client = init_raven()
try:
assets = DeliverableAsset.objects.filter(file_removed_dt__isnull=True)
logger.info('Trying to removing files for {count} deliverables'.format(count=assets.count()))
for asset in assets:
user = User.objects.get(username=settings.VIDISPINE_USERNAME)
status = asset.status(user)
if status != DELIVERABLE_ASSET_STATUS_INGESTED:
logger.debug('Not removing file for asset "{asset}": File not ingested yet'.format(asset=asset))
except Exception as e:
if raven_client is not None:
raven_client.captureException()
raise e