There's some work on book page left.
[wolnelektury.git] / apps / api / handlers.py
index e04710f..7f74c19 100644 (file)
@@ -17,7 +17,7 @@ from sorl.thumbnail import default
 from api.helpers import timestamp
 from api.models import Deleted
 from catalogue.forms import BookImportForm
-from catalogue.models import Book, Tag, BookMedia, Fragment
+from catalogue.models import Book, Tag, BookMedia, Fragment, Collection
 from picture.models import Picture
 from picture.forms import PictureImportForm
 
@@ -138,7 +138,7 @@ class BookDetails(object):
     @classmethod
     def cover_thumb(cls, book):
         return MEDIA_BASE + default.backend.get_thumbnail(
-                    book.cover, "139x193").url
+                    book.cover, "139x193").url if book.cover else ''
 
 
 
@@ -230,6 +230,10 @@ class BooksHandler(BookDetailHandler):
             return rc.NOT_FOUND
 
 
+class EBooksHandler(AnonymousBooksHandler):
+    fields = ('author', 'href', 'title', 'cover') + tuple(Book.ebook_formats)
+
+
 # add categorized tags fields for Book
 def _tags_getter(category):
     @classmethod
@@ -254,6 +258,52 @@ for format in Book.formats:
     setattr(BookDetails, format, _file_getter(format))
 
 
+class CollectionDetails(object):
+    """Custom Collection fields."""
+
+    @classmethod
+    def href(cls, collection):
+        """ Returns URI in the API for the collection. """
+
+        return API_BASE + reverse("api_collection", args=[collection.slug])
+
+    @classmethod
+    def url(cls, collection):
+        """ Returns URL on the site. """
+
+        return WL_BASE + collection.get_absolute_url()
+
+    @classmethod
+    def books(cls, collection):
+        return Book.objects.filter(collection.get_query())
+
+
+
+class CollectionDetailHandler(BaseHandler, CollectionDetails):
+    allowed_methods = ('GET',)
+    fields = ['url', 'title', 'description', 'books']
+
+    @piwik_track
+    def read(self, request, slug):
+        print slug
+        """ Returns details of a collection, identified by slug. """
+        try:
+            return Collection.objects.get(slug=slug)
+        except Collection.DoesNotExist:
+            return rc.NOT_FOUND
+
+
+class CollectionsHandler(BaseHandler, CollectionDetails):
+    allowed_methods = ('GET',)
+    model = Collection
+    fields = ['url', 'href', 'title']
+
+    @piwik_track
+    def read(self, request):
+        """ Returns all collections. """
+        return Collection.objects.all()
+
+
 class TagDetails(object):
     """Custom Tag fields."""