X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/bbc5bd6a7c8280758a2388ebffec26e0afc35d00..967fdef6857fca9cddd9d18bcba97e75e66a2927:/apps/catalogue/views.py diff --git a/apps/catalogue/views.py b/apps/catalogue/views.py index f56ec5b5..d0213daa 100644 --- a/apps/catalogue/views.py +++ b/apps/catalogue/views.py @@ -12,12 +12,13 @@ from django.core.urlresolvers import reverse from django.db.models import Count, Q from django import http from django.http import Http404, HttpResponse, HttpResponseForbidden -from django.shortcuts import get_object_or_404, render +from django.shortcuts import get_object_or_404, render, render_to_response from django.utils.encoding import iri_to_uri from django.utils.http import urlquote_plus from django.utils.translation import ugettext_lazy as _ from django.views.decorators.http import require_POST from django.views.generic.simple import direct_to_template +from django.template import RequestContext from apiclient import NotAuthorizedError from catalogue import forms @@ -210,13 +211,9 @@ def book_txt(request, slug): book = get_object_or_404(Book, slug=slug) if not book.accessible(request): return HttpResponseForbidden("Not authorized.") - xml = book.materialize() - output = StringIO() - # errors? - import librarian.text - librarian.text.transform(StringIO(xml), output) - text = output.getvalue() + doc = book.wldocument() + text = doc.as_text().get_string() response = http.HttpResponse(text, content_type='text/plain', mimetype='text/plain') response['Content-Disposition'] = 'attachment; filename=%s.txt' % slug return response @@ -227,16 +224,22 @@ def book_html(request, slug): book = get_object_or_404(Book, slug=slug) if not book.accessible(request): return HttpResponseForbidden("Not authorized.") - xml = book.materialize() - output = StringIO() - # errors? - - import librarian.html - librarian.html.transform(StringIO(xml), output, parse_dublincore=False, - flags=['full-page']) - html = output.getvalue() - response = http.HttpResponse(html, content_type='text/html', mimetype='text/html') - return response + + doc = book.wldocument(parse_dublincore=False) + html = doc.as_html() + + html = html.get_string() if html is not None else '' + # response = http.HttpResponse(html, content_type='text/html', mimetype='text/html') + # return response + # book_themes = {} + # for fragment in book.fragments.all().iterator(): + # for theme in fragment.tags.filter(category='theme').iterator(): + # book_themes.setdefault(theme, []).append(fragment) + + # book_themes = book_themes.items() + # book_themes.sort(key=lambda s: s[0].sort_key) + return render_to_response('catalogue/book_text.html', locals(), + context_instance=RequestContext(request)) @never_cache @@ -245,25 +248,13 @@ def book_pdf(request, slug): if not book.accessible(request): return HttpResponseForbidden("Not authorized.") - from tempfile import NamedTemporaryFile - from os import unlink - from librarian import pdf - from catalogue.ebook_utils import RedakcjaDocProvider, serve_file - - xml = book.materialize() - xml_file = NamedTemporaryFile() - xml_file.write(xml.encode('utf-8')) - xml_file.flush() - - try: - pdf_file = NamedTemporaryFile(delete=False) - pdf.transform(RedakcjaDocProvider(publishable=True), - file_path=xml_file.name, - output_file=pdf_file, - ) - return serve_file(pdf_file.name, book.slug + '.pdf', 'application/pdf') - finally: - unlink(pdf_file.name) + # TODO: move to celery + doc = book.wldocument() + # TODO: error handling + pdf_file = doc.as_pdf() + from catalogue.ebook_utils import serve_file + return serve_file(pdf_file.get_filename(), + book.slug + '.pdf', 'application/pdf') @never_cache @@ -272,23 +263,13 @@ def book_epub(request, slug): if not book.accessible(request): return HttpResponseForbidden("Not authorized.") - from StringIO import StringIO - from tempfile import NamedTemporaryFile - from librarian import epub - from catalogue.ebook_utils import RedakcjaDocProvider - - xml = book.materialize() - xml_file = NamedTemporaryFile() - xml_file.write(xml.encode('utf-8')) - xml_file.flush() - - epub_file = StringIO() - epub.transform(RedakcjaDocProvider(publishable=True), - file_path=xml_file.name, - output_file=epub_file) + # TODO: move to celery + doc = book.wldocument() + # TODO: error handling + epub = doc.as_epub().get_string() response = HttpResponse(mimetype='application/epub+zip') response['Content-Disposition'] = 'attachment; filename=%s' % book.slug + '.epub' - response.write(epub_file.getvalue()) + response.write(epub) return response