1 # -*- coding: utf-8 -*-
 
   2 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 
   3 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 
   5 from functools import wraps
 
   7 from django.shortcuts import get_object_or_404
 
   8 from django.contrib.auth.decorators import login_required, permission_required
 
   9 from piston.handler import BaseHandler
 
  10 from piston.utils import rc, validate
 
  11 from catalogue.models import Book
 
  12 from catalogue.forms import BookImportForm
 
  15 def method_decorator(function_decorator):
 
  17         Turns a function(*args, **kwargs) decorator into an
 
  18         equivalent decorator for method(self, *args, **kwargs).
 
  20     @wraps(function_decorator)
 
  21     def decorator(method):
 
  23         def decorated_method(self, *args, **kwargs):
 
  24             def method_as_function(*fargs, **fkwargs):
 
  25                 return method(self, *fargs, **fkwargs)
 
  26             return function_decorator(method_as_function)(*args, **kwargs)
 
  27         return decorated_method
 
  31 class BookHandler(BaseHandler):
 
  33     fields = ('slug', 'title')
 
  35     def read(self, request, slug=None):
 
  37             return get_object_or_404(Book, slug=slug)
 
  39             return Book.objects.all()
 
  41     @method_decorator(permission_required('catalogue.add_book'))
 
  42     def create(self, request):
 
  43         form = BookImportForm(request.POST, request.FILES)