X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/652e2d66d7f88cc6b857edc4aaac7e14a654eb36..98062d2158ebe1f734d811691ab15e6887684281:/src/catalogue/tasks.py diff --git a/src/catalogue/tasks.py b/src/catalogue/tasks.py index 30bc55fe2..b2308bbdf 100644 --- a/src/catalogue/tasks.py +++ b/src/catalogue/tasks.py @@ -1,15 +1,14 @@ -# -*- coding: utf-8 -*- # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # -from datetime import datetime from traceback import print_exc -from celery.task import task +from celery import shared_task from celery.utils.log import get_task_logger from django.conf import settings +from django.utils import timezone -from catalogue.utils import gallery_path -from wolnelektury.utils import localtime_to_utc +from catalogue.models import Book +from catalogue.utils import absolute_url, gallery_url from waiter.models import WaitedFile task_logger = get_task_logger(__name__) @@ -18,30 +17,36 @@ task_logger = get_task_logger(__name__) # TODO: move to model? def touch_tag(tag): update_dict = { - 'changed_at': localtime_to_utc(datetime.now()), + 'changed_at': timezone.now(), } type(tag).objects.filter(pk=tag.pk).update(**update_dict) -@task +@shared_task(ignore_result=True) +def build_field(pk, field_name): + book = Book.objects.get(pk=pk) + task_logger.info("build %s.%s" % (book.slug, field_name)) + field_file = getattr(book, field_name) + field_file.build() + + +@shared_task def index_book(book_id, book_info=None, **kwargs): - from catalogue.models import Book try: return Book.objects.get(id=book_id).search_index(book_info, **kwargs) - except Exception, e: - print "Exception during index: %s" % e + except Exception as e: + print("Exception during index: %s" % e) print_exc() raise e -@task(ignore_result=True, rate_limit=settings.CATALOGUE_CUSTOMPDF_RATE_LIMIT) +@shared_task(ignore_result=True, rate_limit=settings.CATALOGUE_CUSTOMPDF_RATE_LIMIT) def build_custom_pdf(book_id, customizations, file_name, waiter_id=None): """Builds a custom PDF file.""" try: from django.core.files import File from django.core.files.storage import DefaultStorage - from catalogue.models import Book task_logger.info(DefaultStorage().path(file_name)) if not DefaultStorage().exists(file_name): @@ -55,15 +60,22 @@ def build_custom_pdf(book_id, customizations, file_name, waiter_id=None): pdf = wldoc.as_pdf( customizations=customizations, morefloats=settings.LIBRARIAN_PDF_MOREFLOATS, - ilustr_path=gallery_path(wldoc.book_info.url.slug), + base_url=absolute_url(gallery_url(wldoc.book_info.url.slug)), **kwargs) - DefaultStorage().save(file_name, File(open(pdf.get_filename()))) + with open(pdf.get_filename(), 'rb') as f: + DefaultStorage().save(file_name, File(f)) finally: if waiter_id is not None: WaitedFile.objects.filter(pk=waiter_id).delete() -@task(ignore_result=True) +@shared_task(ignore_result=True) def update_counters(): from .helpers import update_counters update_counters() + + +@shared_task(ignore_result=True) +def update_references(book_id): + Book.objects.get(id=book_id).update_references() +