add collection for Boy
[wolnelektury.git] / apps / catalogue / views.py
index 5f0b016..bf0c42f 100644 (file)
@@ -2,12 +2,6 @@
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
-import tempfile
-import zipfile
-import tarfile
-import sys
-import pprint
-import traceback
 import re
 import itertools
 from datetime import datetime
@@ -35,11 +29,9 @@ from django.views.generic.list_detail import object_list
 from catalogue import models
 from catalogue import forms
 from catalogue.utils import split_tags
-from newtagging import views as newtagging_views
 from pdcounter import models as pdcounter_models
 from pdcounter import views as pdcounter_views
 from suggest.forms import PublishingSuggestForm
-from slughifi import slughifi
 
 
 staff_required = user_passes_test(lambda user: user.is_staff)
@@ -78,7 +70,8 @@ def main_page(request):
         context_instance=RequestContext(request))
 
 
-def book_list(request, filter=None, template_name='catalogue/book_list.html'):
+def book_list(request, filter=None, template_name='catalogue/book_list.html',
+        context=None):
     """ generates a listing of all books, optionally filtered with a test function """
 
     form = forms.SearchForm()
@@ -103,6 +96,17 @@ def daisy_list(request):
                      template_name='catalogue/daisy_list.html')
 
 
+def collection(request, slug):
+    coll = get_object_or_404(models.Collection, slug=slug)
+    slugs = coll.book_slugs.split()
+    # allow URIs
+    slugs = [slug.rstrip('/').rsplit('/', 1)[-1] if '/' in slug else slug
+                for slug in slugs]
+    return book_list(request, Q(slug__in=slugs),
+                     template_name='catalogue/collection.html',
+                     context={'collection': coll})
+
+
 def differentiate_tags(request, tags, ambiguous_slugs):
     beginning = '/'.join(tag.url_chunk for tag in tags)
     unparsed = '/'.join(ambiguous_slugs[1:])
@@ -573,6 +577,10 @@ def download_shelf(request, slug):
     without loading the whole file into memory. A similar approach can
     be used for large dynamic PDF files.
     """
+    from slughifi import slughifi
+    import tempfile
+    import zipfile
+
     shelf = get_object_or_404(models.Tag, slug=slug, category='set')
 
     formats = []
@@ -721,6 +729,9 @@ def import_book(request):
         try:
             book_import_form.save()
         except:
+            import sys
+            import pprint
+            import traceback
             info = sys.exc_info()
             exception = pprint.pformat(info[1])
             tb = '\n'.join(traceback.format_tb(info[2]))