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