X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/3c5fe5b298287f92a9c6a8e485c3860db36931fd..60734259bb91a3ff24ba8a757bb3748648f74366:/apps/api/handlers/library_handlers.py diff --git a/apps/api/handlers/library_handlers.py b/apps/api/handlers/library_handlers.py index 45dff83b..8862de0c 100644 --- a/apps/api/handlers/library_handlers.py +++ b/apps/api/handlers/library_handlers.py @@ -7,18 +7,18 @@ __doc__ = "Module documentation." from piston.handler import BaseHandler, AnonymousBaseHandler -import settings import librarian +import librarian.html import api.forms as forms from datetime import date from django.core.urlresolvers import reverse -from wlrepo import MercurialLibrary, RevisionNotFound, DocumentAlreadyExists +from wlrepo import RevisionNotFound, DocumentAlreadyExists from librarian import dcparser import api.response as response -from api.response import validate_form +from api.utils import validate_form, hglibrary # # Document List Handlers @@ -26,39 +26,39 @@ from api.response import validate_form class BasicLibraryHandler(AnonymousBaseHandler): allowed_methods = ('GET',) - def read(self, request): - """Return the list of documents.""" - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) - + @hglibrary + def read(self, request, lib): + """Return the list of documents.""" document_list = [{ 'url': reverse('document_view', args=[docid]), 'name': docid } for docid in lib.documents() ] return {'documents' : document_list} + class LibraryHandler(BaseHandler): allowed_methods = ('GET', 'POST') anonymous = BasicLibraryHandler - def read(self, request): + @hglibrary + def read(self, request, lib): """Return the list of documents.""" - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) document_list = [{ 'url': reverse('document_view', args=[docid]), 'name': docid } for docid in lib.documents() ] - return {'documents' : document_list } + return {'documents' : document_list } @validate_form(forms.DocumentUploadForm, 'POST') - def create(self, request, form): - """Create a new document.""" - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) + @hglibrary + def create(self, request, form, lib): + """Create a new document.""" if form.cleaned_data['ocr_data']: data = form.cleaned_data['ocr_data'].encode('utf-8') else: - data = request.FILES['ocr'].read().decode('utf-8') + data = request.FILES['ocr_file'].read().decode('utf-8') if form.cleaned_data['generate_dc']: data = librarian.wrap_text(data, unicode(date.today())) @@ -66,12 +66,11 @@ class LibraryHandler(BaseHandler): docid = form.cleaned_data['bookname'] try: doc = lib.document_create(docid) - doc.quickwrite('xml', data, '$AUTO$ XML data uploaded.', + doc = doc.quickwrite('xml', data, '$AUTO$ XML data uploaded.', user=request.user.username) url = reverse('document_view', args=[doc.id]) - return response.EntityCreated().django_response(\ body = { 'url': url, @@ -90,17 +89,18 @@ class LibraryHandler(BaseHandler): class BasicDocumentHandler(AnonymousBaseHandler): allowed_methods = ('GET',) - def read(self, request, docid): - try: - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) + @hglibrary + def read(self, request, docid, lib): + try: doc = lib.document(docid) except RevisionNotFound: return rc.NOT_FOUND result = { 'name': doc.id, - 'text_url': reverse('doctext_view', args=[doc.id]), - 'dc_url': reverse('docdc_view', docid=doc.id), + 'html_url': reverse('dochtml_view', args=[doc.id,doc.revision]), + 'text_url': reverse('doctext_view', args=[doc.id,doc.revision]), + 'dc_url': reverse('docdc_view', args=[doc.id,doc.revision]), 'public_revision': doc.revision, } @@ -113,10 +113,9 @@ class DocumentHandler(BaseHandler): allowed_methods = ('GET', 'PUT') anonymous = BasicDocumentHandler - def read(self, request, docid): - """Read document's meta data""" - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) - + @hglibrary + def read(self, request, docid, lib): + """Read document's meta data""" try: doc = lib.document(docid) udoc = doc.take(request.user.username) @@ -128,42 +127,63 @@ class DocumentHandler(BaseHandler): result = { 'name': udoc.id, - 'text_url': reverse('doctext_view', args=[udoc.id]), - 'dc_url': reverse('docdc_view', args=[udoc.id]), - 'parts_url': reverse('docparts_view', args=[udoc.id]), + 'html_url': reverse('dochtml_view', args=[doc.id,doc.revision]), + 'text_url': reverse('doctext_view', args=[doc.id,doc.revision]), + 'dc_url': reverse('docdc_view', args=[doc.id,doc.revision]), 'user_revision': udoc.revision, 'public_revision': doc.revision, } return result + @hglibrary + def update(self, request, docid, lib): + """Update information about the document, like display not""" + return +# +# +# + +class DocumentHTMLHandler(BaseHandler): + allowed_methods = ('GET', 'PUT') + + @hglibrary + def read(self, request, docid, revision, lib): + """Read document as html text""" + try: + if revision == 'latest': + document = lib.document(docid) + else: + document = lib.document_for_rev(revision) + + return librarian.html.transform(document.data('xml')) + except RevisionNotFound: + return response.EntityNotFound().django_response() + # # Document Text View # class DocumentTextHandler(BaseHandler): allowed_methods = ('GET', 'PUT') - @validate_form(forms.DocumentEntryRequest) - def read(self, request, form, docid): - """Read document as raw text""" - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) - + @hglibrary + def read(self, request, docid, revision, lib): + """Read document as raw text""" try: - if request.GET['revision'] == 'latest': + if revision == 'latest': document = lib.document(docid) else: - document = lib.document_for_rev(request.GET['revision']) + document = lib.document_for_rev(revision) # TODO: some finer-grained access control return document.data('xml') except RevisionNotFound: return response.EntityNotFound().django_response() - def update(self, request, docid): - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) + @hglibrary + def update(self, request, docid, revision, lib): try: - data = request.PUT['contents'] - prev = request.PUT['revision'] + data = request.PUT['contents'] if request.PUT.has_key('message'): msg = u"$USER$ " + request.PUT['message'] @@ -171,7 +191,7 @@ class DocumentTextHandler(BaseHandler): msg = u"$AUTO$ XML content update." current = lib.document(docid, request.user.username) - orig = lib.document_for_rev(prev) + orig = lib.document_for_rev(revision) if current != orig: return response.EntityConflict().django_response({ @@ -200,33 +220,31 @@ class DocumentTextHandler(BaseHandler): class DocumentDublinCoreHandler(BaseHandler): allowed_methods = ('GET', 'PUT') - @validate_form(forms.DocumentEntryRequest) - def read(self, request, docid): - """Read document as raw text""" - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) + @hglibrary + def read(self, request, docid, revision, lib): + """Read document as raw text""" try: - if request.GET['revision'] == 'latest': + if revision == 'latest': document = lib.document(docid) else: - document = lib.document_for_rev(request.GET['revision']) + document = lib.document_for_rev(revision) bookinfo = dcparser.BookInfo.from_string(doc.data('xml')) return bookinfo.serialize() except RevisionNotFound: return response.EntityNotFound().django_response() - def update(self, request, docid): - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) + @hglibrary + def update(self, request, docid, revision, lib): try: - bi_json = request.PUT['contents'] - prev = request.PUT['revision'] + bi_json = request.PUT['contents'] if request.PUT.has_key('message'): msg = u"$USER$ " + request.PUT['message'] else: msg = u"$AUTO$ Dublin core update." current = lib.document(docid, request.user.username) - orig = lib.document_for_rev(prev) + orig = lib.document_for_rev(revision) if current != orig: return response.EntityConflict().django_response({ @@ -250,3 +268,18 @@ class DocumentDublinCoreHandler(BaseHandler): } except (RevisionNotFound, KeyError): return response.EntityNotFound().django_response() + + +class MergeHandler(BaseHandler): + allowed_methods = ('POST',) + + @validate_form(forms.MergeRequestForm) + @hglibrary + def create(self, request, form, docid, lib): + """Create a new document revision from the information provided by user""" + + pass + + + +