# -*- coding: utf-8 -*- # vi:si:et:sw=4:sts=4:ts=4 from datetime import datetime from collections import Counter import ox from celery.schedules import crontab from django.db import transaction from app.celery import app import itemlist.models import item.models import annotation.models import text.models @app.task(ignore_results=True, queue='encoding') def cron(**kwargs): update_double_imdb() outofcopyright() update_keywords() update_queued() def outofcopyright(): for i in item.models.Item.objects.filter(sort__year__lt=datetime.now().year - 60, level=2): i.level = 1 i.save() def update_double_imdb(): l = itemlist.models.List.get('j:Double IMDb') for i in item.models.Item.objects.filter(data__contains='imdbId').exclude(id__in=l.items.all()): if item.models.Item.objects.exclude(id=i.id).filter(sort__imdbId=i.sort.imdbId).exists(): l.add(i) for i in l.items.all(): if not i.get('imdbId') or \ item.models.Item.objects.filter(sort__imdbId=i.sort.imdbId).count() == 1: l.remove(i) transaction.commit() def update_keywords(): t = text.models.Text.get('j:Keywords') keywords = Counter([a['value'] for a in annotation.models.Annotation.objects.filter(layer='keywords').all().values('value') ]) data = ['') t.text = '\n'.join(data) t.save() @app.task(ignore_results=True, queue='encoding') def update_queued(): import archive.models l = itemlist.models.List.get('j:Queued') for f in archive.models.File.objects.filter(queued=True).exclude(id__in=l.items.all()): l.add(f.item) for i in l.items.all(): if not i.files.filter(queued=True).exists(): l.remove(i) l = itemlist.models.List.get('j:Encoding') for f in archive.models.File.objects.filter(encoding=True).exclude(id__in=l.items.all()): l.add(f.item) for i in l.items.all(): if not i.files.filter(encoding=True).exists(): l.remove(i) transaction.commit() @app.on_after_finalize.connect def setup_periodic_tasks(sender, **kwargs): sender.add_periodic_task(crontab(hour=6, minute=0), cron.s())