X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/bd2f4130a81e68a2bb3c8d88448540ec60fe7be5..10fe016074c5af0f8e0464eb3191e868f108a65e:/apps/api/handlers/text_handler.py?ds=sidebyside diff --git a/apps/api/handlers/text_handler.py b/apps/api/handlers/text_handler.py old mode 100644 new mode 100755 index 5e34ab4d..ba8bf717 --- a/apps/api/handlers/text_handler.py +++ b/apps/api/handlers/text_handler.py @@ -44,7 +44,7 @@ class DocumentTextHandler(BaseHandler): user = form.cleaned_data['user'] or request.user.username format = form.cleaned_data['format'] - document = lib.document_for_rev(revision) + document = lib.document_for_revision(revision) if document.id != docid: return response.BadRequest().django_response({ @@ -64,14 +64,13 @@ class DocumentTextHandler(BaseHandler): if not chunk: return document.data('xml') - xdoc = parser.WLDocument.from_string(document.data('xml'),\ - parse_dublincore=False) + xdoc = parser.WLDocument.from_string(document.data('xml'), parse_dublincore=False) xchunk = xdoc.chunk(chunk) if xchunk is None: return response.EntityNotFound().django_response({ - 'reason': 'no-part-in-document', + 'reason': 'no-chunk-in-document', 'path': chunk }) @@ -92,6 +91,7 @@ class DocumentTextHandler(BaseHandler): @validate_form(forms.TextUpdateForm, 'POST') @hglibrary def create(self, request, form, docid, lib): + lock = lib.lock(); try: revision = form.cleaned_data['revision'] msg = form.cleaned_data['message'] @@ -100,14 +100,13 @@ class DocumentTextHandler(BaseHandler): # do not allow changing not owned documents # (for now... ) - if user != request.user.username: return response.AccessDenied().django_response({ 'reason': 'insufficient-priviliges', }) current = lib.document(docid, user) - orig = lib.document_for_rev(revision) + orig = lib.document_for_revision(revision) if current != orig: return response.EntityConflict().django_response({ @@ -115,11 +114,15 @@ class DocumentTextHandler(BaseHandler): "provided_revision": orig.revision, "latest_revision": current.revision }) - if form.cleaned_data.has_key('contents'): + if form.cleaned_data['contents']: data = form.cleaned_data['contents'] else: chunks = form.cleaned_data['chunks'] - xdoc = parser.WLDocument.from_string(current.data('xml')) + data = current.data('xml') + log.info(data[:600]) + log.info(chunks) + + xdoc = parser.WLDocument.from_string(data, parse_dublincore=False) errors = xdoc.merge_chunks(chunks) if len(errors): @@ -130,6 +133,7 @@ class DocumentTextHandler(BaseHandler): data = xdoc.serialize() + # try to find any Xinclude tags includes = [m.groupdict()['link'] for m in (re.finditer(\ XINCLUDE_REGEXP, data, flags=re.UNICODE) or []) ] @@ -182,3 +186,5 @@ class DocumentTextHandler(BaseHandler): except RevisionNotFound, e: return response.EntityNotFound(mimetype="text/plain").\ django_response(e.message) + finally: + lock.release()