X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/71b07fe1928b04a218e062f01cca720863b9eeb9..352b8591bd1c7163835a6fa1db34d3e2861c1071:/apps/api/handlers.py?ds=sidebyside diff --git a/apps/api/handlers.py b/apps/api/handlers.py deleted file mode 100644 index 9a54ce8c..00000000 --- a/apps/api/handlers.py +++ /dev/null @@ -1,203 +0,0 @@ -from piston.handler import BaseHandler, AnonymousBaseHandler -from piston.utils import rc, validate - -import settings -import librarian -import api.forms as forms -from datetime import date - -from django.core.urlresolvers import reverse -from wlrepo import MercurialLibrary, CabinetNotFound - -from librarian import dcparser - -# -# Document List Handlers -# -class BasicLibraryHandler(AnonymousBaseHandler): - allowed_methods = ('GET',) - - def read(self, request): - """Return the list of documents.""" - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) - cab = lib.main_cabinet - - document_list = [{ - 'url': reverse('document_view', args=[docid]), - 'name': docid } for docid in cab.documents() ] - - return { - 'cabinet': cab.name, - 'latest_rev': cab.shelf(), - 'documents' : document_list } - -class LibraryHandler(BaseHandler): - allowed_methods = ('GET', 'POST') - anonymous = BasicLibraryHandler - - def read(self, request): - """Return the list of documents.""" - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) - cab = lib.main_cabinet - - document_list = [{ - 'url': reverse('document_view', args=[docid]), - 'name': docid } for docid in cab.documents() ] - - return { - 'cabinet': cab.name, - 'latest_rev': cab.shelf(), - 'documents' : document_list } - - def create(self, request): - """Create a new document.""" - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) - cab = lib.main_cabinet - - form = forms.DocumentUploadForm(request.POST, request.FILES) - if not form.is_valid(): - return rc.BAD_REQUEST - - f = request.FILES['ocr'] - data = f.read().decode('utf-8') - - if form.cleaned_data['generate_dc']: - data = librarian.wrap_text(data, unicode(date.today())) - - # TODO: what if the file exists ? - doc = cab.create(form.cleaned_data['bookname'], initial_data=data) - - return { - 'url': reverse('document_view', args=[doc.name]), - 'name': doc.name, - 'size': doc.size, - 'revision': doc.shelf() } - -# -# Document Handlers -# -class BasicDocumentHandler(AnonymousBaseHandler): - allowed_methods = ('GET',) - - def read(self, request, docid): - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) - - opts = forms.DocumentGetForm(request.GET) - if not opts.is_valid(): - return rc.BAD_REQUEST - - document = lib.main_cabinet.retrieve(docid) - - result = { - 'name': document.name, - 'size': document.size, - 'text_url': reverse('doctext_view', args=[docid]), - #'dc_url': reverse('docdc_view', docid=document.name), - #'parts_url': reverse('docparts_view', docid=document.name), - 'latest_rev': document.shelf(), - } - - if request.GET.get('with_part', 'no') == 'yes': - result['parts'] = document.parts() - - return result - -# -# Document Meta Data -# -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) - - opts = forms.DocumentGetForm(request.GET) - if not opts.is_valid(): - return rc.BAD_REQUEST - - document = lib.cabinet(docid, request.user.username, \ - create=opts.cleaned_data['autocabinet'] ).retrieve() - - if not document: - return rc.NOT_HERE - - shared = lib.main_cabinet.retrieve(docid) - - is_shared = document.ancestorof(shared) - # is_uptodate = is_shared or shared.ancestorof(document) - - result = { - 'name': document.name, - 'size': document.size, - 'text_url': reverse('doctext_view', args=[docid]), - 'dc_url': reverse('docdc_view', args=[docid]), - 'parts_url': reverse('docparts_view', args=[docid]), - 'latest_rev': document.shelf(), - 'latest_shared_rev': shared.shelf(), - 'shared': is_shared, - # 'up_to_date': is_uptodate, - } - - #if request.GET.get('with_part', 'no') == 'yes': - # result['parts'] = document.parts() - - return result - -# -# Document Text View -# -class DocumentTextHandler(BaseHandler): - allowed_methods = ('GET', 'PUT') - - def read(self, request, docid): - """Read document as raw text""" - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) - try: - # latest rev - # comment - return lib.document(docid, request.user.username).read() - except CabinetNotFound: - return rc.NOT_HERE - - def update(self, request, docid): - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) - try: - # check latest REV - data = request.PUT['contents'] - lib.document(docid, request.user.username).write(data) - return rc.ALL_OK - except (CabinetNotFound, KeyError): - return rc.NOT_HERE - - -# -# Dublin Core handlers -# -# @requires librarian -# -class DocumentDublinCoreHandler(BaseHandler): - allowed_methods = ('GET', 'PUT') - - def read(self, request, docid): - """Read document as raw text""" - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) - try: - doc = lib.document(docid, request.user.username) - - # TODO: RAL:document should support file-like ops - bookinfo = dcparser.BookInfo.from_string(doc.read()) - return bookinfo.serialize() - except CabinetNotFound: - return rc.NOT_HERE - - def update(self, request, docid): - lib = MercurialLibrary(path=settings.REPOSITORY_PATH) - try: - data = request.PUT['contents'] - lib.document(docid, request.user.username).write(data) - return rc.ALL_OK - except (CabinetNotFound, KeyError): - return rc.NOT_HERE -