Added converter from json cinelab to ldt
authorverrierj
Wed, 05 Oct 2011 11:25:51 +0200
changeset 195 6580f5804006
parent 194 be01ce6ba490
child 196 b939a58d13b0
Added converter from json cinelab to ldt
src/ldt/ldt/ldt_utils/projectserializer.py
--- a/src/ldt/ldt/ldt_utils/projectserializer.py	Fri Sep 30 17:41:47 2011 +0200
+++ b/src/ldt/ldt/ldt_utils/projectserializer.py	Wed Oct 05 11:25:51 2011 +0200
@@ -2,6 +2,7 @@
 from django.utils.datastructures import SortedDict
 from ldt.ldt_utils.models import Content
 from ldt.ldt_utils.utils import reduce_text_node
+from ldt.ldt_utils.models import User, Project
 import logging
 import lxml.etree
 import uuid
@@ -437,4 +438,88 @@
             
         return annotations
 
+"""
+Quick and dirty converter from cinelab JSON to ldt format.
+Does not support imports, mutliple medias, or media creation
+"""   
+class JsonCinelab2Ldt:
+    
+    def create_json(self, json):
+            
+        medias = json['medias']
+        contentList = [] 
+        for media in medias:
+            c = Content.objects.get(iri_id=media['id'])
+            if c != None:
+                contentList.append(c)
+            
+        meta = json['meta']            
+        creator = meta['creator']
+        contributor = meta['contributor']
+            
+        user = User.objects.get(username=creator)
+        project = Project.create_project(user, creator + '_' + contributor, contentList)
+        project.changed_by = contributor
+            
+        ldtdoc = lxml.etree.fromstring(project.ldt.encode("utf-8"))
+        element = ldtdoc.xpath('/iri/annotations')
+            
+        for media in contentList:
+            content = lxml.etree.Element('content')
+            content.set('id', media.iri_id)              
+                      
+        annotation_types = json['annotation_types']
+        cuttings = {}
+        if len(annotation_types) > 0:
+            media = lxml.etree.SubElement(element[0], 'content')
+            media.set('id', medias[0]['id'])
+                
+            ens = lxml.etree.SubElement(media, 'ensemble')
+            ens.set('title', 'Decoupages personnels') 
+            ens.set('idProject', project.ldt_id)
+            ens.set('abstract', '')
+            ens.set('id', 'g_' + str(uuid.uuid1()))
+            
+            for i in annotation_types:
+                cutting_infos = {'desc' : i['meta']['description']}
+                
+                dec = lxml.etree.SubElement(ens, 'decoupage') 
+                dec.set('author', contributor)
+                dec.set('id', 'c_' + str(uuid.uuid1()))
+                elements_list = lxml.etree.SubElement(dec, 'elements')
+                    
+                title = lxml.etree.SubElement(dec, 'title')
+                title.text = i['id']
+                
+                abstract = lxml.etree.SubElement(dec, 'abstract')
+                abstract.text = i['meta']['description']
+                
+                cutting_infos['xml_node'] = elements_list
+                cuttings[i['id']] = cutting_infos 
+                   
+                 
+        annotations = json['annotations']            
+        for i in annotations:
+            cutting_infos = cuttings[i['type']]
+            elements_node = cutting_infos['xml_node']
+            element = lxml.etree.SubElement(elements_node, 'element')
+            
+            element.set('begin', str(i['begin']))
+            element.set('dur', str(i['end'] - i['begin']))
+            element.set('id', 's_' + str(uuid.uuid1()))
+            
+            title = lxml.etree.SubElement(element, 'title')
+            audio = lxml.etree.SubElement(element, 'audio')
+            audio.set('source', 'undefined')
+            abstract = lxml.etree.SubElement(element, 'abstract')
+            abstract.text = i['content']['data']
+            tags = lxml.etree.SubElement(element, 'tags')
+            for tag in i['tags']:
+                tag_xml = lxml.etree.SubElement(tags, 'tag')
+                tag_xml.text = tag
+                    
+            
+        project.ldt = lxml.etree.tostring(ldtdoc, pretty_print=True)
+        project.save()
         
+        return project.ldt