X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/21e60dff855cacb585e159850e2de899d4622e5d..351e2a633425b85d99a284b8836f375f81cc8dce:/apps/api/handlers/text_handler.py diff --git a/apps/api/handlers/text_handler.py b/apps/api/handlers/text_handler.py old mode 100644 new mode 100755 index c4a4d0b3..ba8bf717 --- a/apps/api/handlers/text_handler.py +++ b/apps/api/handlers/text_handler.py @@ -64,8 +64,7 @@ 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) @@ -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()