X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/c01328ac5559b3d335a1689599c70aca2781a892..21e60dff855cacb585e159850e2de899d4622e5d:/apps/api/handlers/library_handlers.py diff --git a/apps/api/handlers/library_handlers.py b/apps/api/handlers/library_handlers.py old mode 100644 new mode 100755 index 5eb5202c..31981b4c --- a/apps/api/handlers/library_handlers.py +++ b/apps/api/handlers/library_handlers.py @@ -31,6 +31,10 @@ import api.response as response from api.utils import validate_form, hglibrary, natural_order from api.models import PartCache, PullRequest +from pygments import highlight +from pygments.lexers import DiffLexer +from pygments.formatters import HtmlFormatter + # import settings @@ -205,19 +209,23 @@ class DiffHandler(BaseHandler): allowed_methods = ('GET',) @hglibrary - def read(self, request, source_revision, target_revision, lib): - '''Return diff between source_revision and target_revision)''' - source_document = lib.document_for_rev(source_revision) - target_document = lib.document_for_rev(target_revision) - print source_document, - print target_document + def read(self, request, docid, lib): + '''Return diff between source_revision and target_revision)''' + revision = request.GET.get('revision') + if not revision: + return '' + source_document = lib.document(docid) + target_document = lib.document_for_revision(revision) + print source_document, target_document + diff = difflib.unified_diff( source_document.data('xml').splitlines(True), target_document.data('xml').splitlines(True), 'source', 'target') - return ''.join(list(diff)) + s = ''.join(list(diff)) + return highlight(s, DiffLexer(), HtmlFormatter(cssclass="pastie")) # @@ -261,7 +269,7 @@ class DocumentHandler(BaseHandler): elif is_prq(user): prq = prq_for_user(user) # commiter's document - prq_doc = lib.document_for_rev(prq.source_revision) + prq_doc = lib.document_for_revision(prq.source_revision) doc = prq_doc.take(user) else: return response.EntityNotFound().django_response({ @@ -310,7 +318,7 @@ class DocumentHTMLHandler(BaseHandler): try: revision = form.cleaned_data['revision'] user = form.cleaned_data['user'] or request.user.username - document = lib.document_for_rev(revision) + document = lib.document_for_revision(revision) if document.id != docid: return response.BadRequest().django_response({ @@ -328,7 +336,7 @@ class DocumentHTMLHandler(BaseHandler): return error return librarian.html.transform(document.data('xml'), is_file=False, \ - parse_dublincore=False, stylesheet=stylesheet,\ + parse_dublincore=False, stylesheet='full',\ options={ "with-paths": 'boolean(1)', }) @@ -336,6 +344,9 @@ class DocumentHTMLHandler(BaseHandler): except (EntryNotFound, RevisionNotFound), e: return response.EntityNotFound().django_response({ 'reason': 'not-found', 'message': e.message}) + except librarian.ValidationError, e: + return response.InternalError().django_response({ + 'reason': 'xml-non-valid', 'message': e.message }) except librarian.ParseError, e: return response.InternalError().django_response({ 'reason': 'xml-parse-error', 'message': e.message }) @@ -409,7 +420,7 @@ class DocumentGalleryHandler(BaseHandler): # if revision == 'latest': # doc = lib.document(docid) # else: -# doc = lib.document_for_rev(revision) +# doc = lib.document_for_revision(revision) # # # if document.id != docid: @@ -434,7 +445,7 @@ class DocumentGalleryHandler(BaseHandler): # msg = u"$AUTO$ Dublin core update." # # current = lib.document(docid, request.user.username) -# orig = lib.document_for_rev(revision) +# orig = lib.document_for_revision(revision) # # if current != orig: # return response.EntityConflict().django_response({ @@ -479,7 +490,7 @@ class MergeHandler(BaseHandler): doc = lib.document(docid) # fetch the base document - user_doc = lib.document_for_rev(revision) + user_doc = lib.document_for_revision(revision) base_doc = user_doc.latest() if base_doc != user_doc: @@ -509,9 +520,11 @@ class MergeHandler(BaseHandler): "message": "You must first update your branch to the latest version." }) - if base_doc.parentof(doc) or base_doc.has_parent_from(doc): + anwser, info = base_doc.would_share() + + if not anwser: return response.SuccessAllOk().django_response({ - "result": "no-op" + "result": "no-op", "message": info }) # check for unresolved conflicts