Source fixes: avoid race and wait a minute after uploading to prevent unnecessary...
[redakcja.git] / src / documents / views.py
index 225ad55..905e885 100644 (file)
@@ -23,6 +23,7 @@ from django.utils.translation import gettext_lazy as _
 from django.views.decorators.http import require_POST
 from django_cas_ng.decorators import user_passes_test
 
 from django.views.decorators.http import require_POST
 from django_cas_ng.decorators import user_passes_test
 
+from librarian import epubcheck
 from apiclient import api_call, NotAuthorizedError
 from . import forms
 from . import helpers
 from apiclient import api_call, NotAuthorizedError
 from . import forms
 from . import helpers
@@ -300,7 +301,8 @@ def book_epub(request, slug):
 
     from librarian.builders import EpubBuilder
     epub = EpubBuilder(
 
     from librarian.builders import EpubBuilder
     epub = EpubBuilder(
-        base_url='file://' + book.gallery_path() + '/'
+        base_url='file://' + book.gallery_path() + '/',
+        debug=True
     ).build(doc).get_bytes()
     response = HttpResponse(content_type='application/epub+zip')
     response['Content-Disposition'] = 'attachment; filename=%s' % book.slug + '.epub'
     ).build(doc).get_bytes()
     response = HttpResponse(content_type='application/epub+zip')
     response['Content-Disposition'] = 'attachment; filename=%s' % book.slug + '.epub'
@@ -308,6 +310,35 @@ def book_epub(request, slug):
     return response
 
 
     return response
 
 
+@login_required
+@never_cache
+def book_epubcheck(request, slug):
+    book = get_object_or_404(Book, slug=slug)
+    if not book.accessible(request):
+        return HttpResponseForbidden("Not authorized.")
+
+    # TODO: move to celery
+    doc = book.wldocument(librarian2=True)
+    # TODO: error handling
+
+    from librarian.builders import EpubBuilder
+    epub = EpubBuilder(
+        base_url='file://' + book.gallery_path() + '/',
+        debug=True
+    ).build(doc)
+    fname = epub.get_filename()
+
+    messages = epubcheck.epubcheck(fname)
+    for message in messages:
+        for location in message.get('locations', []):
+            if 'wl_chunk' in location:
+                location['wl_chunk'] = book[location['wl_chunk']]
+    return render(request, 'documents/book_epubcheck.html', {
+        'messages': messages,
+        'book': book,
+    })
+
+
 @login_required
 @never_cache
 def book_mobi(request, slug):
 @login_required
 @never_cache
 def book_mobi(request, slug):
@@ -362,14 +393,21 @@ def book(request, slug):
     publish_error = book.publishable_error()
     publishable = publish_error is None
 
     publish_error = book.publishable_error()
     publishable = publish_error is None
 
+    stats = None
     try:
     try:
-        doc = book.wldocument()
+        doc = book.wldocument(librarian2=True)
     except:
         doc = None
     except:
         doc = None
-    
+    else:
+        try:
+            stats = doc.get_statistics()
+        except:
+            pass
+
     return render(request, "documents/book_detail.html", {
         "book": book,
         "doc": doc,
     return render(request, "documents/book_detail.html", {
         "book": book,
         "doc": doc,
+        "stats": stats,
         "publishable": publishable,
         "publishable_error": publish_error,
         "form": form,
         "publishable": publishable,
         "publishable_error": publish_error,
         "form": form,