Podstawowy DiffHandler.
authorzuber <marek@stepniowski.com>
Tue, 20 Oct 2009 16:05:53 +0000 (18:05 +0200)
committerzuber <marek@stepniowski.com>
Tue, 20 Oct 2009 16:06:05 +0000 (18:06 +0200)
apps/api/handlers/library_handlers.py
apps/api/resources.py
apps/api/urls.py

index 0635861..9751fef 100644 (file)
@@ -9,6 +9,7 @@ __date__ = "$2009-09-25 15:49:50$"
 __doc__ = "Module documentation."
 
 from piston.handler import BaseHandler, AnonymousBaseHandler
 __doc__ = "Module documentation."
 
 from piston.handler import BaseHandler, AnonymousBaseHandler
+from django.http import HttpResponse
 
 import re
 from datetime import date
 
 import re
 from datetime import date
@@ -19,6 +20,7 @@ from django.db import IntegrityError
 
 import librarian
 import librarian.html
 
 import librarian
 import librarian.html
+import difflib
 from librarian import dcparser, parser
 
 from wlrepo import *
 from librarian import dcparser, parser
 
 from wlrepo import *
@@ -200,6 +202,26 @@ class BasicDocumentHandler(AnonymousBaseHandler):
 
         return result
 
 
         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
 #
 #
 # Document Meta Data
 #
index a124a2f..4e0a118 100644 (file)
@@ -21,6 +21,7 @@ document_html_resource = Resource(dh.DocumentHTMLHandler, **authdata)
 # document_dc_resource = Resource(dh.DocumentDublinCoreHandler, **authdata)
 document_gallery = Resource(dh.DocumentGalleryHandler, **authdata)
 document_merge = Resource(dh.MergeHandler, **authdata)
 # document_dc_resource = Resource(dh.DocumentDublinCoreHandler, **authdata)
 document_gallery = Resource(dh.DocumentGalleryHandler, **authdata)
 document_merge = Resource(dh.MergeHandler, **authdata)
+diff_resource = Resource(dh.DiffHandler, **authdata)
 
 import api.handlers.manage_handlers as mh
 
 
 import api.handlers.manage_handlers as mh
 
@@ -48,4 +49,5 @@ __all__ = [
     'scriptlets',
     'pullrequest_collection',
     'pullrequest_rsrc',
     'scriptlets',
     'pullrequest_collection',
     'pullrequest_rsrc',
+    'diff_resource',
 ]
\ No newline at end of file
 ]
\ No newline at end of file
index db6ff1e..0ed6459 100644 (file)
@@ -74,7 +74,11 @@ urlpatterns = patterns('',
 
     # MERGE
     url(urlpath(r'documents', DOC, 'revision', format=False),
 
     # MERGE
     url(urlpath(r'documents', DOC, 'revision', format=False),
-        document_merge, {'emitter_format': 'json'}, name="docmerge_view")
+        document_merge, {'emitter_format': 'json'}, name="docmerge_view"),
+        
+    url(r'diffs/(?P<source_revision>latest|[0-9a-fA-F]+)/(?P<target_revision>latest|[0-9a-fA-F]+)/$',
+        diff_resource, {'emitter_format': 'raw'}, name="diff_resource"),
+    
 
 #    url(r'^documents/(?P<docid>[^/]+)/parts$',
 #        document_resource, {'emitter_format': 'json'},
 
 #    url(r'^documents/(?P<docid>[^/]+)/parts$',
 #        document_resource, {'emitter_format': 'json'},