# HG changeset patch # User verrierj # Date 1317806751 -7200 # Node ID 6580f5804006baed668e4f40e490e9cc6cbedf17 # Parent be01ce6ba490883193f03bb326035cee26c5821e Added converter from json cinelab to ldt diff -r be01ce6ba490 -r 6580f5804006 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