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
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."""
#book_list_resource = Resource(handler=handlers.BooksHandler)
book_resource = Resource(handler=handlers.BookDetailHandler)
+collection_resource = Resource(handler=handlers.CollectionDetailHandler)
+collection_list_resource = Resource(handler=handlers.CollectionsHandler)
+
tag_list_resource = Resource(handler=handlers.TagsHandler)
tag_resource = Resource(handler=handlers.TagDetailHandler)
url(r'tag/(?P<id>\d*?)/info\.html$', 'catalogue.views.tag_info'),
+ # books by collections
+ url(r'^collections/$', collection_list_resource, name="api_collections"),
+ url(r'^collections/(?P<slug>[^/]+)/$', collection_resource, name="api_collection"),
+
# objects details
url(r'^books/(?P<book>[a-z0-9-]+)/$', book_resource, name="api_book"),
url(r'^(?P<category>[a-z0-9-]+)/(?P<slug>[a-z0-9-]+)/$',
def collection(request, slug):
coll = get_object_or_404(models.Collection, slug=slug)
- def get_filter():
- slugs = coll.book_slugs.split()
- # allow URIs
- slugs = [slug.rstrip('/').rsplit('/', 1)[-1] if '/' in slug else slug
- for slug in slugs]
- return Q(slug__in=slugs)
- return book_list(request, get_filter=get_filter,
+ return book_list(request, get_filter=coll.get_query,
template_name='catalogue/collection.html',
cache_key='catalogue.collection:%s' % coll.slug,
context={'collection': coll})