web/ldt/ldt_utils/models.py
changeset 83 ec31a4bd86d3
parent 82 9202807b4cec
child 85 3b70d84e661a
--- a/web/ldt/ldt_utils/models.py	Tue Oct 12 03:23:33 2010 +0200
+++ b/web/ldt/ldt_utils/models.py	Tue Oct 12 16:11:15 2010 +0200
@@ -297,6 +297,57 @@
             return True
         else:
             return False
+        
+    def getAnnotations(self, first_cutting=True):
+        doc = lxml.etree.fromstring(self.ldt)
+    
+        annotations = []
+        
+        for contentnode in doc.xpath("/iri/annotations/content"):
+            iri_id = contentnode.get("id")
+            content = Content.objects.get(iri_id=iri_id)
+            
+            for cuttingnode in contentnode.xpath("ensemble/decoupage"):
+                
+                for annotationnode in cuttingnode.xpath("elements/element"):
+                    tags = annotationnode.get('tags')
+                    tags_list = []
+                    tags_list.extend(annotationnode.xpath("tags/tag/text()"))
+                    if tags:
+                        tags_list.append(tags)
+                    
+                    def accumulate(a, b):
+                        a.extend(b)
+                        return a
+                    
+                    tags_list = reduce(lambda a, s:accumulate(a,s.split(',')), tags_list, [])
+                    
+                    begin = annotationnode.get('begin')
+                    if begin is None:
+                        begin = 0
+                    else:
+                        begin = int(begin)
+        
+                    uri = None            
+                    if content.media_obj.external_publication_url:
+                        uri = "%s#t=%d" % (content.media_obj.external_publication_url, begin)
+        
+                    annotations.append({
+                        'begin': begin,
+                        'duration':annotationnode.get('dur'),
+                        'title':u"".join(annotationnode.xpath("title/text()")),
+                        'desc':u"".join(annotationnode.xpath("abstract/text()")),
+                        'tags': tags_list,
+                        'id':u"".join(annotationnode.get('id')),
+                        'uri':uri
+                    })
+                if first_cutting and len(annotations) > 0 :
+                    break
+            if first_cutting and len(annotations) > 0 :
+                break
+            
+        return annotations
+
 
 class Segment(models.Model):