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):
('nofootnotes', _("Don't show footnotes")),
('nothemes', _("Don't disply themes")),
('nowlfont', _("Don't use our custom font")),
+ ('no-cover', _("Without cover")),
)
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"), (
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):
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, waiter_id: build_custom_pdf.delay(self.book.id,
+ self.cleaned_data['cust'], p, waiter_id),
+ self.book.pretty_title()
+ )
+ #return redirect(url)
+ return {"redirect": url}