X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/54e4ec4a3aac555f44ea604c12a3955592b5d568..938fc832934e508085dad3645c01060a4dc9f0c9:/apps/api/handlers.py diff --git a/apps/api/handlers.py b/apps/api/handlers.py index 62708c953..586e921ca 100644 --- a/apps/api/handlers.py +++ b/apps/api/handlers.py @@ -15,6 +15,8 @@ from api.helpers import timestamp from api.models import Deleted from catalogue.forms import BookImportForm from catalogue.models import Book, Tag, BookMedia, Fragment +from picture.models import Picture +from picture.forms import PictureImportForm from stats.utils import piwik_track @@ -97,14 +99,10 @@ class BookDetailHandler(BaseHandler): 'media', 'url'] + category_singular.keys() @piwik_track - def read(self, request, book): + def read(self, request, slug): """ Returns details of a book, identified by a slug and lang. """ - kwargs = Book.split_urlid(book) - if not kwargs: - return rc.NOT_FOUND - try: - return Book.objects.get(**kwargs) + return Book.objects.get(slug=slug) except Book.DoesNotExist: return rc.NOT_FOUND @@ -125,7 +123,7 @@ class AnonymousBooksHandler(AnonymousBaseHandler): @classmethod def href(cls, book): """ Returns an URI for a Book in the API. """ - return API_BASE + reverse("api_book", args=[book.urlid()]) + return API_BASE + reverse("api_book", args=[book.slug]) @classmethod def url(cls, book): @@ -267,18 +265,10 @@ class FragmentDetailHandler(BaseHandler): fields = ['book', 'anchor', 'text', 'url', 'themes'] @piwik_track - def read(self, request, book, anchor): + def read(self, request, slug, anchor): """ Returns details of a fragment, identified by book slug and anchor. """ - kwargs = Book.split_urlid(book) - if not kwargs: - return rc.NOT_FOUND - - fragment_kwargs = {} - for field, value in kwargs.items(): - fragment_kwargs['book__' + field] = value - try: - return Fragment.objects.get(anchor=anchor, **fragment_kwargs) + return Fragment.objects.get(book__slug=slug, anchor=anchor) except Fragment.DoesNotExist: return rc.NOT_FOUND @@ -315,7 +305,8 @@ class FragmentsHandler(BaseHandler): def href(cls, fragment): """ Returns URI in the API for the fragment. """ - return API_BASE + reverse("api_fragment", args=[fragment.book.urlid(), fragment.anchor]) + return API_BASE + reverse("api_fragment", + args=[fragment.book.slug, fragment.anchor]) @classmethod def url(cls, fragment): @@ -580,3 +571,21 @@ class ChangesHandler(CatalogueHandler): @piwik_track def read(self, request, since): return self.changes(request, since) + + +class PictureHandler(BaseHandler): + model = Picture + fields = ('slug', 'title') + allowed_methods = ('POST',) + + def create(self, request): + if not request.user.has_perm('picture.add_picture'): + return rc.FORBIDDEN + + data = json.loads(request.POST.get('data')) + form = PictureImportForm(data) + if form.is_valid(): + form.save() + return rc.CREATED + else: + return rc.NOT_FOUND