Merge branch 'master' of stigma:platforma
authorŁukasz Rekucki <lrekucki@gmail.com>
Wed, 21 Oct 2009 21:27:54 +0000 (23:27 +0200)
committerŁukasz Rekucki <lrekucki@gmail.com>
Wed, 21 Oct 2009 21:27:54 +0000 (23:27 +0200)
1  2 
apps/api/handlers/library_handlers.py

@@@ -9,6 -9,7 +9,7 @@@ __date__ = "$2009-09-25 15:49:50$
  __doc__ = "Module documentation."
  
  from piston.handler import BaseHandler, AnonymousBaseHandler
+ from django.http import HttpResponse
  
  from datetime import date
  
@@@ -17,6 -18,8 +18,8 @@@ from django.db import IntegrityErro
  
  import librarian
  import librarian.html
+ import difflib
+ from librarian import dcparser, parser
  
  from wlrepo import *
  from api.models import PullRequest
@@@ -197,6 -200,26 +200,26 @@@ class BasicDocumentHandler(AnonymousBas
  
          return result
  
+ 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
+         diff = difflib.unified_diff(
+             source_document.data('xml').splitlines(True),
+             target_document.data('xml').splitlines(True),
+             'source',
+             'target')
+         
+         return ''.join(list(diff))
  #
  # Document Meta Data
  #
@@@ -305,7 -328,7 +328,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)',                    
                  })
          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 })