--- 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