Fix bug when computing stat on a project where the media is referenced in the xml but is not included in the contents field
authorverrierj
Thu, 12 Jan 2012 10:09:21 +0100
changeset 351 74f898bd0983
parent 350 c6953232099f
child 352 6fa2e1f8ddaa
Fix bug when computing stat on a project where the media is referenced in the xml but is not included in the contents field
src/ldt/ldt/ldt_utils/stat.py
--- a/src/ldt/ldt/ldt_utils/stat.py	Wed Jan 11 14:57:33 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/stat.py	Thu Jan 12 10:09:21 2012 +0100
@@ -5,6 +5,7 @@
 
 
 def update_stat_project(project, contents=None, doc=None, update_contents=[]):
+    
     if not contents:
         contents = project.contents.all()
      
@@ -16,29 +17,34 @@
         
     for content_node in doc.xpath('/iri/annotations/content'):
         content_name = content_node.get('id')
-        content = contents.get(iri_id=content_name)
-        contribution_to_content = contributions.get(content=content)
-        
-        size_division = content.duration / number_division
-        limits = [x * size_division for x in range(number_division+1)]
-        buckets = [0] * number_division
-        nb_annotation = 0
+        content = contents.filter(iri_id=content_name)
         
-        for ann in content_node.xpath('ensemble/decoupage/elements/element'):
- 
-            begin = int(ann.get('begin'))
-            end = int(ann.get('dur')) + begin
-                    
-            buckets = find_buckets(buckets, limits, begin, end)
-            nb_annotation += 1        
-       
-        buckets = get_string_from_buckets(buckets)
-         
-        if contribution_to_content.stat != buckets or contribution_to_content.nb_annotation != nb_annotation:
-            contribution_to_content.stat = buckets
-            contribution_to_content.nb_annotation = nb_annotation
-            contribution_to_content.save()
-            update_stat_content(content)
+        # if the content referenced in the xml belongs to the
+        # fields contents of the project
+        if len(content) != 0:
+            content = content[0]
+            contribution_to_content = contributions.get(content=content)
+            
+            size_division = content.duration / number_division
+            limits = [x * size_division for x in range(number_division+1)]
+            buckets = [0] * number_division
+            nb_annotation = 0
+            
+            for ann in content_node.xpath('ensemble/decoupage/elements/element'):
+     
+                begin = int(ann.get('begin'))
+                end = int(ann.get('dur')) + begin
+                        
+                buckets = find_buckets(buckets, limits, begin, end)
+                nb_annotation += 1        
+           
+            buckets = get_string_from_buckets(buckets)
+             
+            if contribution_to_content.stat != buckets or contribution_to_content.nb_annotation != nb_annotation:
+                contribution_to_content.stat = buckets
+                contribution_to_content.nb_annotation = nb_annotation
+                contribution_to_content.save()
+                update_stat_content(content)
     
     for content in update_contents:
         update_stat_content(content)