From 132297f0be27da544304733bd24da32282310235 Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Wed, 29 Jun 2016 17:07:35 +0200 Subject: [PATCH] attachments; previews (not real, just working) --- apps/catalogue/ebook_utils.py | 5 ++-- apps/catalogue/models/book.py | 25 +++++++++++++------ .../templates/catalogue/book_detail.html | 1 - apps/catalogue/views.py | 5 ++-- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/apps/catalogue/ebook_utils.py b/apps/catalogue/ebook_utils.py index d9c99227..c16b2958 100644 --- a/apps/catalogue/ebook_utils.py +++ b/apps/catalogue/ebook_utils.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- -from StringIO import StringIO from catalogue.models import Book -from librarian import DocProvider +from librarian import DocProvider, IOFile from django.http import HttpResponse @@ -12,7 +11,7 @@ class RedakcjaDocProvider(DocProvider): self.publishable = publishable def by_slug(self, slug): - return StringIO(Book.objects.get(dc_slug=slug + return IOFile.from_string(Book.objects.get(dc_slug=slug ).materialize(publishable=self.publishable ).encode('utf-8')) diff --git a/apps/catalogue/models/book.py b/apps/catalogue/models/book.py index 6aa183dc..83db3057 100755 --- a/apps/catalogue/models/book.py +++ b/apps/catalogue/models/book.py @@ -319,14 +319,14 @@ class Book(models.Model): def book_info(self, publishable=True): try: - book_xml = self.materialize(publishable=publishable) + book_xml = self.wl1_xml(publishable=publishable) except self.NoTextError: pass else: from librarian.dcparser import BookInfo from librarian import NoDublinCore, ParseError, ValidationError try: - return BookInfo.from_string(book_xml.encode('utf-8')) + return BookInfo.from_string(book_xml) except (self.NoTextError, ParseError, NoDublinCore, ValidationError): return None @@ -408,14 +408,23 @@ class Book(models.Model): parse_dublincore=parse_dublincore, strict=strict) - def publish(self, user): + def publish(self, user, host=None): """ Publishes a book on behalf of a (local) user. """ + import json + import os + from django.conf import settings self.assert_publishable() changes = self.get_current_changes() - book_xml = self.wl1_xml(changes=changes) - apiclient.api_call(user, "lessons/", {"lesson_xml": book_xml}) + data = {"lesson_xml": self.wl1_xml(changes=changes)} + if host: + gallery_url = u'%s%s%s%s/' % (host, settings.MEDIA_URL, settings.IMAGE_DIR, self.slug) + gallery_dir = os.path.join(settings.MEDIA_ROOT, settings.IMAGE_DIR, self.slug) + if os.path.isdir(gallery_dir): + data['gallery_url'] = gallery_url + data['attachments'] = json.dumps(os.listdir(gallery_dir)) + apiclient.api_call(user, "lessons/", data) # record the publish br = BookPublishRecord.objects.create(book=self, user=user) for c in changes: @@ -430,7 +439,7 @@ class Book(models.Model): import os.path from django.conf import settings from fnpdjango.utils.text.slughifi import slughifi - from librarian import ParseError + from librarian import ParseError, DCNS def _register_function(f): """ Register extension function with lxml """ @@ -472,7 +481,9 @@ class Book(models.Model): break else: # print 'BRAK PRZEBIEGU' - raise ParseError('Brak przebiegu') + dc_type = i1.findall('//dc:type', namespaces={'dc': DCNS.uri}) + if dc_type and dc_type[0] in ('course', 'synthetic'): + raise ParseError('Brak przebiegu') i1.getroot().attrib['redslug'] = self.slug i1.getroot().attrib['wlslug'] = self.slug # THIS! diff --git a/apps/catalogue/templates/catalogue/book_detail.html b/apps/catalogue/templates/catalogue/book_detail.html index 2355cb0f..ce0f8627 100755 --- a/apps/catalogue/templates/catalogue/book_detail.html +++ b/apps/catalogue/templates/catalogue/book_detail.html @@ -58,7 +58,6 @@ {% trans "HTML version" %}
{% trans "TXT version" %}
{% trans "PDF version" %}
- {% trans "EPUB version" %}

{% if user.is_authenticated %} diff --git a/apps/catalogue/views.py b/apps/catalogue/views.py index 94710cab..2ba0fb6d 100644 --- a/apps/catalogue/views.py +++ b/apps/catalogue/views.py @@ -225,7 +225,7 @@ def book_html(request, slug): if not book.accessible(request): return HttpResponseForbidden("Not authorized.") - doc = book.wldocument(parse_dublincore=False) + doc = book.wldocument() html = doc.as_html() html = html.get_string() if html is not None else '' @@ -482,7 +482,8 @@ def publish(request, slug): return HttpResponseForbidden("Not authorized.") try: - book.publish(request.user) + protocol = 'https://' if request.is_secure() else 'http://' + book.publish(request.user, host=protocol + request.get_host()) except NotAuthorizedError: return http.HttpResponseRedirect(reverse('apiclient_oauth')) except ApiError, e: -- 2.20.1