From: Radek Czajka Date: Tue, 11 Oct 2011 10:33:07 +0000 (+0200) Subject: Merge branch 'redakcja-api' X-Git-Url: https://git.mdrn.pl/wolnelektury.git/commitdiff_plain/60b06883b6d5a336ef47c01103ec1ce25aafae69?hp=849f19a3c55d9846b7b671ce516b0934b62777b5 Merge branch 'redakcja-api' Conflicts: apps/api/handlers.py apps/api/urls.py --- diff --git a/apps/api/handlers.py b/apps/api/handlers.py index 685dfafa2..9bb89005c 100644 --- a/apps/api/handlers.py +++ b/apps/api/handlers.py @@ -3,15 +3,17 @@ # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. from datetime import datetime, timedelta +import json from django.conf import settings from django.contrib.sites.models import Site from django.core.urlresolvers import reverse -from piston.handler import BaseHandler +from piston.handler import AnonymousBaseHandler, BaseHandler from piston.utils import rc from api.helpers import timestamp from api.models import Deleted +from catalogue.forms import BookImportForm from catalogue.models import Book, Tag, BookMedia, Fragment @@ -103,7 +105,7 @@ class BookDetailHandler(BaseHandler): return rc.NOT_FOUND -class BooksHandler(BaseHandler): +class AnonymousBooksHandler(AnonymousBaseHandler): """ Main handler for Book objects. Responsible for lists of Book objects @@ -151,6 +153,9 @@ class BooksHandler(BaseHandler): else: return rc.NOT_FOUND + def create(self, request, tags, top_level=False): + return 'aaa' + @classmethod def media(self, book): """ Returns all media for a book. """ @@ -158,6 +163,23 @@ class BooksHandler(BaseHandler): return book.media.all() +class BooksHandler(BaseHandler): + model = Book + fields = ('slug', 'title') + anonymous = AnonymousBooksHandler + + def create(self, request, tags, top_level=False): + if not request.user.has_perm('catalogue.add_book'): + return rc.FORBIDDEN + + data = json.loads(request.POST.get('data')) + form = BookImportForm(data) + if form.is_valid(): + form.save() + return rc.CREATED + else: + return rc.NOT_FOUND + # add categorized tags fields for Book def _tags_getter(category): @classmethod diff --git a/apps/api/templates/oauth/challenge.html b/apps/api/templates/oauth/challenge.html new file mode 100755 index 000000000..e69de29bb diff --git a/apps/api/urls.py b/apps/api/urls.py index 89bb6001c..2d92eba46 100644 --- a/apps/api/urls.py +++ b/apps/api/urls.py @@ -1,15 +1,19 @@ # -*- coding: utf-8 -*- from django.conf.urls.defaults import * +from piston.authentication import OAuthAuthentication from piston.resource import Resource from api import handlers +auth = OAuthAuthentication(realm="Wolne Lektury") + book_changes_resource = Resource(handler=handlers.BookChangesHandler) tag_changes_resource = Resource(handler=handlers.TagChangesHandler) changes_resource = Resource(handler=handlers.ChangesHandler) -book_list_resource = Resource(handler=handlers.BooksHandler) +book_list_resource = Resource(handler=handlers.BooksHandler, authentication=auth) +#book_list_resource = Resource(handler=handlers.BooksHandler) book_resource = Resource(handler=handlers.BookDetailHandler) tag_list_resource = Resource(handler=handlers.TagsHandler) @@ -19,7 +23,13 @@ fragment_resource = Resource(handler=handlers.FragmentDetailHandler) fragment_list_resource = Resource(handler=handlers.FragmentsHandler) -urlpatterns = patterns('', +urlpatterns = patterns( + 'piston.authentication', + url(r'^oauth/request_token/$', 'oauth_request_token'), + url(r'^oauth/authorize/$', 'oauth_user_auth'), + url(r'^oauth/access_token/$', 'oauth_access_token'), + +) + patterns('', url(r'^$', 'django.views.generic.simple.direct_to_template', {'template': 'api/main.html'}), diff --git a/apps/catalogue/forms.py b/apps/catalogue/forms.py index fd751965a..2bf974d44 100644 --- a/apps/catalogue/forms.py +++ b/apps/catalogue/forms.py @@ -3,6 +3,7 @@ # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # from django import forms +from django.core.files.base import ContentFile from django.utils.translation import ugettext_lazy as _ from slughifi import slughifi @@ -12,7 +13,17 @@ from catalogue import utils class BookImportForm(forms.Form): - book_xml_file = forms.FileField() + book_xml_file = forms.FileField(required=False) + book_xml = forms.CharField(required=False) + + def clean(self): + if not self.cleaned_data['book_xml_file']: + if self.cleaned_data['book_xml']: + self.cleaned_data['book_xml_file'] = \ + ContentFile(self.cleaned_data['book_xml'].encode('utf-8')) + else: + raise forms.ValidationError(_("Please supply an XML.")) + return super(BookImportForm, self).clean() def save(self, commit=True, **kwargs): return Book.from_xml_file(self.cleaned_data['book_xml_file'], overwrite=True, **kwargs) diff --git a/wolnelektury/settings.py b/wolnelektury/settings.py index 946a6216e..5cb556bb4 100644 --- a/wolnelektury/settings.py +++ b/wolnelektury/settings.py @@ -110,7 +110,7 @@ TEMPLATE_DIRS = [ path.join(PROJECT_DIR, 'templates'), ] -LOGIN_URL = '/uzytkownicy/zaloguj/' +LOGIN_URL = '/uzytkownicy/login/' LOGIN_REDIRECT_URL = '/' diff --git a/wolnelektury/templates/catalogue/book_detail.html b/wolnelektury/templates/catalogue/book_detail.html index 7d0adcb3c..3d0b92d18 100644 --- a/wolnelektury/templates/catalogue/book_detail.html +++ b/wolnelektury/templates/catalogue/book_detail.html @@ -181,6 +181,9 @@ {% if extra_info.source_url %}
  • {% trans "Source of the book" %}
  • {% endif %} + {% if extra_info.about %} +
  • {% trans "Book on the Editor's Platform" %}
  • + {% endif %} {% if book.gazeta_link %}
  • {% trans "Book description on Lektury.Gazeta.pl" %}
  • {% endif %} diff --git a/wolnelektury/templates/piston/authorize_token.html b/wolnelektury/templates/piston/authorize_token.html new file mode 100755 index 000000000..ba28adc4a --- /dev/null +++ b/wolnelektury/templates/piston/authorize_token.html @@ -0,0 +1,15 @@ + + + + Authorize Token + + +

    Authorize Token

    + +
    + {{ form.as_table }} + +
    + + + diff --git a/wolnelektury/templates/registration/login.html b/wolnelektury/templates/registration/login.html new file mode 100755 index 000000000..b88d4e19d --- /dev/null +++ b/wolnelektury/templates/registration/login.html @@ -0,0 +1,5 @@ +
    + {% csrf_token %} + {{ form }} + +
    diff --git a/wolnelektury/urls.py b/wolnelektury/urls.py index aa9588af4..f379c9ca1 100644 --- a/wolnelektury/urls.py +++ b/wolnelektury/urls.py @@ -35,6 +35,7 @@ urlpatterns = patterns('', url(r'^uzytkownicy/zaloguj/$', 'catalogue.views.login', name='login'), url(r'^uzytkownicy/wyloguj/$', 'catalogue.views.logout_then_redirect', name='logout'), url(r'^uzytkownicy/utworz/$', 'catalogue.views.register', name='register'), + url(r'^uzytkownicy/login/$', 'django.contrib.auth.views.login', name='simple_login'), # API (r'^api/', include('api.urls')),