# HG changeset patch # User cavaliet # Date 1352384838 -3600 # Node ID 2ad812edbd3881951dcd1c586712a6c5beaf3b14 # Parent 9f29dfc4c2036dfa13c659b457736836f7a94244 End cinelab json to ldt xml serializer. Now deserialize edits/mashup. diff -r 9f29dfc4c203 -r 2ad812edbd38 src/ldt/ldt/api/ldt/serializers/cinelabserializer.py --- a/src/ldt/ldt/api/ldt/serializers/cinelabserializer.py Wed Nov 07 17:52:14 2012 +0100 +++ b/src/ldt/ldt/api/ldt/serializers/cinelabserializer.py Thu Nov 08 15:27:18 2012 +0100 @@ -7,6 +7,7 @@ from ldt.ldt_utils.utils import generate_uuid from tastypie.serializers import Serializer from tastypie.exceptions import NotFound +import math import lxml.etree import logging @@ -94,6 +95,10 @@ tag_dict = {t["id"]:t["meta"]["dc:title"] for t in cinelab["tags"]} # We'll also build a annotation-type to media/ensemble dict to simplify the views node building at_media_dict = {} + # We'll also build a dict from annotation id to media/ensemble/decoupage dict to simplify the edits/mashup node building + annot_ids_dict = {} + # We'll also build a dict from media id to media url dict to simplify the edits/mashup node building + media_url_dict = {} # create a dom iri = lxml.etree.Element('iri') @@ -117,8 +122,10 @@ mediaNode.set('src', content.iri_url()) if content.videopath != None : mediaNode.set('video', content.videopath) + media_url_dict[iri_id] = {'url':content.videopath + content.src, 'pos':None} else: mediaNode.set('video', settings.STREAM_URL) + media_url_dict[iri_id] = {'url':settings.STREAM_URL + content.src, 'pos':None} mediaNode.set('pict', "") mediaNode.set('extra', "") # We add the annotations @@ -153,6 +160,7 @@ # We get all the annotations for this media and this annotation-type for a in annotations: if a["media"]==iri_id and a["meta"]["id-ref"]==at_id: + annot_ids_dict[a["id"]] = (iri_id, l["id"], at_id, a["begin"], a["end"], a["color"]) elementNode = lxml.etree.SubElement(elementsNode, 'element') elementNode.set('id', a["id"]) elementNode.set('begin', str(a["begin"])) @@ -216,6 +224,69 @@ id_sel = "" displayNode.set('idsel', id_sel) + # Now we build the edit node + editsNode = lxml.etree.SubElement(iri, 'edits') + i = 0 + for l in cinelab["lists"]: + if l["meta"].has_key("listtype"): + if l["meta"]["listtype"]=="mashup": + editingNode = lxml.etree.SubElement(editsNode, 'editing') + editingNode.set('id', str(i)) + i += 1 + editingNode.set('tags', "") + titleEd = lxml.etree.SubElement(editingNode, 'title') + titleEd.text = l["meta"]["dc:title"] + abstractEd = lxml.etree.SubElement(editingNode, 'abstract') + abstractEd.text = l["meta"]["dc:description"] + editNode = lxml.etree.SubElement(editingNode, 'edit') + editNode.set('id', "edit1") + editNode.set('tags', "") + # We build the 4 nodes (2 are used in reality : edit list and media list + eListNode = lxml.etree.SubElement(editNode, 'eList') + lxml.etree.SubElement(editNode, 'caption') + lxml.etree.SubElement(editNode, 'audio') + mListNode = lxml.etree.SubElement(editNode, 'mList') + media_pos = 0 + edit_fulltime = 0 + for a_id in l["items"]: + # the key is the annotation's id + iri_id, ens_id, at_id, begin, end, color = annot_ids_dict[a_id] + # We check the media's position in media list. If it was not set, we create the mList node + if media_url_dict[iri_id]["pos"] is None: + media_url_dict[iri_id]["pos"] = media_pos + mNode = lxml.etree.SubElement(mListNode, 'm') + mNode.set('ref', iri_id) + mNode.set('id', str(media_pos)) + media_pos += 1 + mNode.set('t', "v") + mNode.set('c', color) + contentEd = lxml.etree.SubElement(mNode, 'content') + contentEd.text = media_url_dict[iri_id]["url"] + # We add the annotation/instruction to the eList + instNode = lxml.etree.SubElement(eListNode, 'inst') + instNode.set('ref', iri_id + "|;|" + ens_id + "|;|" + at_id + "|;||;||;|" + a_id) + b = int(math.floor(begin/1000)) + instNode.set('begin', str(b)) + e = int(math.floor(end/1000)) + instNode.set('end', str(e)) + instNode.set('m', str(media_url_dict[iri_id]["pos"])) + instNode.set('v', "100") + instNode.set('eBegin', str(edit_fulltime)) + edit_fulltime = edit_fulltime + e - b + instNode.set('eEnd', str(edit_fulltime)) + instNode.set('trId', "0") + instNode.set('trIc', "0") + instNode.set('trOd', "0") + instNode.set('trOc', "0") + # The second empty edit + edit2Node = lxml.etree.SubElement(editingNode, 'edit') + edit2Node.set('id', "edit2") + edit2Node.set('tags', "") + lxml.etree.SubElement(edit2Node, 'eList') + lxml.etree.SubElement(edit2Node, 'caption') + lxml.etree.SubElement(edit2Node, 'audio') + lxml.etree.SubElement(edit2Node, 'mList') + # This is the end return iri \ No newline at end of file