X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/aae5369e6dab510705fdfa1265cf9e095d24a97d..4fb0bfd1b7351af7d83a2cc69e7fca666a359160:/apps/catalogue/forms.py?ds=sidebyside diff --git a/apps/catalogue/forms.py b/apps/catalogue/forms.py index d191d46db..5fb113c24 100644 --- a/apps/catalogue/forms.py +++ b/apps/catalogue/forms.py @@ -6,6 +6,10 @@ from django import forms from django.utils.translation import ugettext_lazy as _ from catalogue.models import Book +from waiter.models import WaitedFile +from django.core.exceptions import ValidationError +from catalogue.utils import get_customized_pdf_path +from catalogue.tasks import build_custom_pdf class BookImportForm(forms.Form): @@ -45,12 +49,12 @@ CUSTOMIZATION_FLAGS = ( ) CUSTOMIZATION_OPTIONS = ( ('leading', _("Leading"), ( - ('defaultleading', _('Normal leading')), + ('', _('Normal leading')), ('onehalfleading', _('One and a half leading')), ('doubleleading', _('Double leading')), )), ('fontsize', _("Font size"), ( - ('11pt', _('Default')), + ('', _('Default')), ('13pt', _('Big')) )), # ('pagesize', _("Paper size"), ( @@ -61,12 +65,21 @@ CUSTOMIZATION_OPTIONS = ( class CustomPDFForm(forms.Form): - def __init__(self, *args, **kwargs): + def __init__(self, book, *args, **kwargs): super(CustomPDFForm, self).__init__(*args, **kwargs) + self.book = book for name, label in CUSTOMIZATION_FLAGS: self.fields[name] = forms.BooleanField(required=False, label=label) for name, label, choices in CUSTOMIZATION_OPTIONS: - self.fields[name] = forms.ChoiceField(choices, label=label) + self.fields[name] = forms.ChoiceField(choices, required=False, label=label) + + def clean(self): + self.cleaned_data['cust'] = self.customizations + self.cleaned_data['path'] = get_customized_pdf_path(self.book, + self.cleaned_data['cust']) + if not WaitedFile.can_order(self.cleaned_data['path']): + raise ValidationError(_('Queue is full. Please try again later.')) + return self.cleaned_data @property def customizations(self): @@ -75,6 +88,20 @@ class CustomPDFForm(forms.Form): if self.cleaned_data.get(name): c.append(name) for name, label, choices in CUSTOMIZATION_OPTIONS: - c.append(self.cleaned_data[name]) + option = self.cleaned_data.get(name) + if option: + c.append(option) c.sort() return c + + def save(self, *args, **kwargs): + if not self.cleaned_data['cust'] and self.book.pdf_file: + # Don't build with default options, just redirect to the standard file. + return {"redirect": self.book.pdf_file.url} + url = WaitedFile.order(self.cleaned_data['path'], + lambda p: build_custom_pdf.delay(self.book.id, + self.cleaned_data['cust'], p), + self.book.pretty_title() + ) + #return redirect(url) + return {"redirect": url}