# HG changeset patch # User ymh # Date 1286903353 -7200 # Node ID 3b70d84e661a320e31e64e547511357340adb23f # Parent 6c3162d9e63274cfb1d63ae40b5251a3ec2da7e0 Bug corrections remove some corrections by wakimd diff -r 6c3162d9e632 -r 3b70d84e661a web/franceculture/templates/franceculture/partial/embed_seo_body.html --- a/web/franceculture/templates/franceculture/partial/embed_seo_body.html Tue Oct 12 16:35:06 2010 +0200 +++ b/web/franceculture/templates/franceculture/partial/embed_seo_body.html Tue Oct 12 19:09:13 2010 +0200 @@ -2,7 +2,7 @@ diff -r 6c3162d9e632 -r 3b70d84e661a web/ldt/ldt_utils/models.py --- a/web/ldt/ldt_utils/models.py Tue Oct 12 16:35:06 2010 +0200 +++ b/web/ldt/ldt_utils/models.py Tue Oct 12 19:09:13 2010 +0200 @@ -329,7 +329,7 @@ begin = int(begin) uri = None - if content.media_obj.external_publication_url: + if content.media_obj and content.media_obj.external_publication_url: uri = "%s#t=%d" % (content.media_obj.external_publication_url, begin) annotations.append({ diff -r 6c3162d9e632 -r 3b70d84e661a web/ldt/ldt_utils/projectserializer.py --- a/web/ldt/ldt_utils/projectserializer.py Tue Oct 12 16:35:06 2010 +0200 +++ b/web/ldt/ldt_utils/projectserializer.py Tue Oct 12 19:09:13 2010 +0200 @@ -10,7 +10,7 @@ """ class ProjectSerializer: - def __init__(self, project): + def __init__(self, project, serialize_contents=True): self.project = project self.ldt_doc = None self.medias = [] @@ -19,6 +19,7 @@ self.annotation_types = [] self.views = [] self.lists = [] + self.serialize_contents = serialize_contents def __parse_ensemble(self, ensemble_node, content): @@ -265,11 +266,10 @@ self.medias.append(new_media) - - res = doc.xpath("/iri/body/ensembles/ensemble") - - for ensemble_node in res: - self.__parse_ensemble(ensemble_node, content) + if self.serialize_contents: + res = doc.xpath("/iri/body/ensembles/ensemble") + for ensemble_node in res: + self.__parse_ensemble(ensemble_node, content) def serialize_to_cinelab(self): diff -r 6c3162d9e632 -r 3b70d84e661a web/ldt/ldt_utils/tests.py --- a/web/ldt/ldt_utils/tests.py Tue Oct 12 16:35:06 2010 +0200 +++ b/web/ldt/ldt_utils/tests.py Tue Oct 12 19:09:13 2010 +0200 @@ -38,142 +38,142 @@ class UtilsTest(unittest.TestCase): def setUp(self): - self.user = Owner() - self.user.username = "toto" - self.LU = LdtUtils() - - self.project = Project(title="titleproj1", owner=self.user) - self.project.ldt = ' CA: prof et admin <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe Reprise de la figure precedente TC: prof et admin Conseil de classe conseil de classe Reprise de la figure precedente Bout a bout 1 ' - self.project.id = "11" - self.project.ldt_id = str(uuid.uuid1()) - self.project.save() - - self.projectcopy = Project(title="the2ndproject") - self.projectcopy.id="22" + self.user = Owner() + self.user.username = "toto" + self.LU = LdtUtils() + + self.project = Project(title="titleproj1", owner=self.user) + self.project.ldt = ' CA: prof et admin <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe Reprise de la figure precedente TC: prof et admin Conseil de classe conseil de classe Reprise de la figure precedente Bout a bout 1 ' + self.project.id = "11" + self.project.ldt_id = str(uuid.uuid1()) + self.project.save() + + self.projectcopy = Project(title="the2ndproject") + self.projectcopy.id="22" def tearDown(self): - self.project.delete() - self.projectcopy.delete() - #self.cont1.delete() - #self.cont2.delete() + self.project.delete() + self.projectcopy.delete() + #self.cont1.delete() + #self.cont2.delete() def test_generate_ldt(self): - self.cont1 = Content(iriurl="id1/iriurl1") - self.cont1.iri_id = "id1" - self.cont1.save() - - self.cont2 = Content(iriurl="id2/iriurl2") - self.cont2.iri_id = "id2" - self.cont2.save() - - self.project.contents.add(self.cont1,self.cont2) - - f=tempfile.TemporaryFile(mode='r+') - self.LU.generateLdt(Content.objects.all(),f) - f.seek(0) - ldoc = lxml.etree.parse(f) - self.assertEqual(ldoc.xpath("/iri/displays/display/content")[9].get("id"),self.cont2.iri_id) - self.assertEqual(ldoc.xpath("/iri/medias/media")[8].get("id"), self.cont1.iri_id) - f.close() + self.cont1 = Content(iriurl="id1/iriurl1") + self.cont1.iri_id = "id1" + self.cont1.save() + + self.cont2 = Content(iriurl="id2/iriurl2") + self.cont2.iri_id = "id2" + self.cont2.save() + + self.project.contents.add(self.cont1,self.cont2) + + f=tempfile.TemporaryFile(mode='r+') + self.LU.generateLdt(Content.objects.all(),f) + f.seek(0) + ldoc = lxml.etree.parse(f) + self.assertEqual(ldoc.xpath("/iri/displays/display/content")[9].get("id"),self.cont2.iri_id) + self.assertEqual(ldoc.xpath("/iri/medias/media")[8].get("id"), self.cont1.iri_id) + f.close() def test_generate_init(self): - self.cont3 = Content(iriurl="id3/iriurl1") - self.cont3.iri_id = "id3" - self.cont3.save() - - self.cont4 = Content(iriurl="id4/iriurl2") - self.cont4.iri_id = "id4" - self.cont4.save() - - self.project.contents.add(self.cont3,self.cont4) - ldoc = self.LU.generateInit(None,None) - self.assertEqual(ldoc.xpath("/iri/files/init")[0].tag, "init") - self.assertEqual(ldoc.xpath("/iri/files/library")[0].tag, "library") - self.assertEqual(ldoc.xpath("/iri/files/init/file")[0].get("video"), settings.STREAM_URL) + self.cont3 = Content(iriurl="id3/iriurl1") + self.cont3.iri_id = "id3" + self.cont3.save() + + self.cont4 = Content(iriurl="id4/iriurl2") + self.cont4.iri_id = "id4" + self.cont4.save() + + self.project.contents.add(self.cont3,self.cont4) + ldoc = self.LU.generateInit(None,None) + self.assertEqual(ldoc.xpath("/iri/files/init")[0].tag, "init") + self.assertEqual(ldoc.xpath("/iri/files/library")[0].tag, "library") + self.assertEqual(ldoc.xpath("/iri/files/init/file")[0].get("video"), settings.STREAM_URL) def test_create_ldt(self): - self.cont5 = Content(iriurl="id5/iriurl1") - self.cont5.iri_id = "id5" - self.cont5.save() - - self.cont6 = Content(iriurl="id6/iriurl2") - self.cont6.iri_id = "id6" - self.cont6.save() - - self.project.contents.add(self.cont5,self.cont6) - self.project.ldt="" - create_ldt(self.project, self.user) - ldt = lxml.etree.fromstring(self.project.ldt) - self.assertEqual(ldt.xpath("/iri")[0].tag,"iri") - self.assertEqual(ldt.xpath("/iri/project")[0].get("title"), self.project.title) - self.assertEqual(ldt.xpath("/iri/medias/media")[0].get("src"), self.cont5.iri_url()) - self.assertEqual(ldt.xpath("/iri/medias/media")[1].get("id"), self.cont6.iri_id) + self.cont5 = Content(iriurl="id5/iriurl1") + self.cont5.iri_id = "id5" + self.cont5.save() + + self.cont6 = Content(iriurl="id6/iriurl2") + self.cont6.iri_id = "id6" + self.cont6.save() + + self.project.contents.add(self.cont5,self.cont6) + self.project.ldt="" + create_ldt(self.project, self.user) + ldt = lxml.etree.fromstring(self.project.ldt) + self.assertEqual(ldt.xpath("/iri")[0].tag,"iri") + self.assertEqual(ldt.xpath("/iri/project")[0].get("title"), self.project.title) + self.assertEqual(ldt.xpath("/iri/medias/media")[0].get("src"), self.cont5.iri_url()) + self.assertEqual(ldt.xpath("/iri/medias/media")[1].get("id"), self.cont6.iri_id) def test_copy_ldt(self): - self.cont7 = Content(iriurl="id7/iriurl1") - self.cont7.iri_id = "id7" - self.cont7.save() - - self.cont8 = Content(iriurl="id8/iriurl2") - self.cont8.iri_id = "id8" - self.cont8.save() - - self.project.contents.add(self.cont7,self.cont8) - copy_ldt(self.project, self.projectcopy, self.user) - ldt1=lxml.etree.fromstring(self.project.ldt) - ldt2=lxml.etree.fromstring(self.projectcopy.ldt) - self.assertTrue(ldt1.xpath("/iri/project")[0].get("id")!= ldt2.xpath("/iri/project")[0].get("id")) - self.assertEqual(ldt1.xpath("/iri/medias/media")[0].get("id"),ldt2.xpath("/iri/medias/media")[0].get("id")) - self.assertEqual(ldt1.xpath("/iri/annotations/content/ensemble")[0].get("title"),ldt2.xpath("/iri/annotations/content/ensemble")[0].get("title")) - self.assertEqual(ldt1.xpath("/iri/annotations/content/ensemble/decoupage")[0].get("id"),ldt2.xpath("/iri/annotations/content/ensemble/decoupage")[0].get("id")) - self.assertEqual(ldt1.xpath("/iri/annotations/content/ensemble/decoupage/title")[1].text,ldt2.xpath("/iri/annotations/content/ensemble/decoupage/title")[1].text.strip("\n\t")) + self.cont7 = Content(iriurl="id7/iriurl1") + self.cont7.iri_id = "id7" + self.cont7.save() + + self.cont8 = Content(iriurl="id8/iriurl2") + self.cont8.iri_id = "id8" + self.cont8.save() + + self.project.contents.add(self.cont7,self.cont8) + copy_ldt(self.project, self.projectcopy, self.user) + ldt1=lxml.etree.fromstring(self.project.ldt) + ldt2=lxml.etree.fromstring(self.projectcopy.ldt) + self.assertTrue(ldt1.xpath("/iri/project")[0].get("id")!= ldt2.xpath("/iri/project")[0].get("id")) + self.assertEqual(ldt1.xpath("/iri/medias/media")[0].get("id"),ldt2.xpath("/iri/medias/media")[0].get("id")) + self.assertEqual(ldt1.xpath("/iri/annotations/content/ensemble")[0].get("title"),ldt2.xpath("/iri/annotations/content/ensemble")[0].get("title")) + self.assertEqual(ldt1.xpath("/iri/annotations/content/ensemble/decoupage")[0].get("id"),ldt2.xpath("/iri/annotations/content/ensemble/decoupage")[0].get("id")) + self.assertEqual(ldt1.xpath("/iri/annotations/content/ensemble/decoupage/title")[1].text,ldt2.xpath("/iri/annotations/content/ensemble/decoupage/title")[1].text.strip("\n\t")) def test_create_empty_iri(self): - self.cont9 = Content(iriurl="id9/iriurl1") - self.cont9.iri_id = "id9" - self.cont9.save() - - self.cont10 = Content(iriurl="id10/iriurl2") - self.cont10.iri_id = "id10" - self.cont10.save() - - self.project.contents.add(self.cont9,self.cont10) - tmp = tempfile.TemporaryFile(mode='r+') - create_empty_iri(tmp, self.cont9, "admin") - tmp.seek(0) - ldoc = lxml.etree.parse(tmp) - self.assertEqual(ldoc.xpath("/iri/head/meta")[0].get("content"), self.cont9.iri_id) - self.assertEqual(ldoc.xpath("/iri/body/medias/media/video")[0].get("id"), self.cont9.iri_id) - tmp.close() - + self.cont9 = Content(iriurl="id9/iriurl1") + self.cont9.iri_id = "id9" + self.cont9.save() + + self.cont10 = Content(iriurl="id10/iriurl2") + self.cont10.iri_id = "id10" + self.cont10.save() + + self.project.contents.add(self.cont9,self.cont10) + tmp = tempfile.TemporaryFile(mode='r+') + create_empty_iri(tmp, self.cont9, "admin") + tmp.seek(0) + ldoc = lxml.etree.parse(tmp) + self.assertEqual(ldoc.xpath("/iri/head/meta")[0].get("content"), self.cont9.iri_id) + self.assertEqual(ldoc.xpath("/iri/body/medias/media/video")[0].get("id"), self.cont9.iri_id) + tmp.close() + class ViewsTest(unittest.TestCase): def setUp(self): - self.project = Project() - self.project.id = "121" - self.project.save() + self.project = Project() + self.project.id = "121" + self.project.save() self.project.ldt = ' CA: prof et admin <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe Reprise de la figure precedente TC: prof et admin Conseil de classe conseil de classe Reprise de la figure precedente Bout a bout 1 ' - - self.cont1 = Content(iriurl="/laurentcantet_entrelesmurs/iriurl1") - self.cont1.iri_id = 'laurentcantet_entrelesmurs' - self.cont1.save() - - self.cont2 = Content(iriurl="/content_notinldt/iriurl2") - self.cont2.iri_id = 'content_notinldt' - self.cont2.save() - - self.project.contents.add(self.cont1, self.cont2) + + self.cont1 = Content(iriurl="/laurentcantet_entrelesmurs/iriurl1") + self.cont1.iri_id = 'laurentcantet_entrelesmurs' + self.cont1.save() + + self.cont2 = Content(iriurl="/content_notinldt/iriurl2") + self.cont2.iri_id = 'content_notinldt' + self.cont2.save() + + self.project.contents.add(self.cont1, self.cont2) def tearDown(self): - self.project.delete() - ##self.cont1.delete() - ##self.cont2.delete() + self.project.delete() + ##self.cont1.delete() + ##self.cont2.delete() - def test_get_attrib(self): - get_attrib(self.project) - ldoc = lxml.etree.fromstring(self.project.ldt) - self.assertEqual(self.project.title, ldoc.xpath("/iri/project")[0].get("title")) - self.assertEqual(ldoc.xpath("/iri/medias/media")[0].get('id'), self.cont1.iri_id) - self.assertTrue(self.cont2.iri_id not in self.project.contents.all()) +# def test_get_attrib(self): +# get_attrib(self.project) +# ldoc = lxml.etree.fromstring(self.project.ldt) +# self.assertEqual(self.project.title, ldoc.xpath("/iri/project")[0].get("title")) +# self.assertEqual(ldoc.xpath("/iri/medias/media")[0].get('id'), self.cont1.iri_id) +# self.assertTrue(self.cont2.iri_id not in self.project.contents.all()) diff -r 6c3162d9e632 -r 3b70d84e661a web/ldt/ldt_utils/utils.py --- a/web/ldt/ldt_utils/utils.py Tue Oct 12 16:35:06 2010 +0200 +++ b/web/ldt/ldt_utils/utils.py Tue Oct 12 19:09:13 2010 +0200 @@ -36,7 +36,7 @@ queryParser.setDefaultOperator(lucene.QueryParser.Operator.AND) queryObj = queryParser.parse(query) hits = indexSearcher.search(queryObj, settings.LDT_MAX_SEARCH_NUMBER) - + res = [] for hit in hits.scoreDocs: doc = indexSearcher.doc(hit.doc) @@ -44,146 +44,146 @@ indexSearcher.close() return res - def queryAll(self, query): + def queryAll(self, query): return self.query("all", query) class LdtUtils(object): def generateLdt(self, contentList, file, title = u"", author=u"IRI Web", web_url=u"", media_url="", startSegment = None, contributions=None): - iri = lxml.etree.Element(u'iri') - doc = lxml.etree.ElementTree(iri) - - project = lxml.etree.SubElement(iri, u'project') - project.set(u"id",unicode(str(uuid.uuid1()))) + iri = lxml.etree.Element(u'iri') + doc = lxml.etree.ElementTree(iri) + + project = lxml.etree.SubElement(iri, u'project') + project.set(u"id",unicode(str(uuid.uuid1()))) project.set(u"title",unicode(title)) - project.set(u"user",author) - project.set(u"abstract",u"") - - medias = lxml.etree.SubElement(iri, u"medias") - for content in contentList: - videopath = unicode(settings.STREAM_URL) - if content.videopath : - videopath = unicode(content.videopath) - media = lxml.etree.SubElement(medias, "media") - media.set(u"id",content.iri_id) - media.set(u"src",content.iri_url(web_url)) - media.set(u"video",videopath) + project.set(u"user",author) + project.set(u"abstract",u"") + + medias = lxml.etree.SubElement(iri, u"medias") + for content in contentList: + videopath = unicode(settings.STREAM_URL) + if content.videopath : + videopath = unicode(content.videopath) + media = lxml.etree.SubElement(medias, "media") + media.set(u"id",content.iri_id) + media.set(u"src",content.iri_url(web_url)) + media.set(u"video",videopath) media.set(u"pict",u"") media.set(u"extra",u"") - - if contributions is None: - contributions = [] - annotations_nodes = {} - for contrib in contributions: - ldtdoc = lxml.etree.fromstring(contrib.ldtproject.ldt.encode("utf-8")) - res = ldtdoc.xpath("/iri/annotations/content") - - for content in res: - contentid = content.get("id") - if annotations_nodes.has_key(contentid): - contentnode = annotations_nodes[contentid] - else: - contentnode = {"id":contentid, "ensembles":[]} - annotations_nodes[contentid]=contentnode - for ens in content.childNodes: - if ens.tag.endswith("ensemble"): - contentnode["ensembles"].append(ens.tag) - - - if len(annotations_nodes) > 0: - annotations = lxml.etree.SubElement(iri, "annotations") + + if contributions is None: + contributions = [] + annotations_nodes = {} + for contrib in contributions: + ldtdoc = lxml.etree.fromstring(contrib.ldtproject.ldt.encode("utf-8")) + res = ldtdoc.xpath("/iri/annotations/content") + + for content in res: + contentid = content.get("id") + if annotations_nodes.has_key(contentid): + contentnode = annotations_nodes[contentid] + else: + contentnode = {"id":contentid, "ensembles":[]} + annotations_nodes[contentid]=contentnode + for ens in content.childNodes: + if ens.tag.endswith("ensemble"): + contentnode["ensembles"].append(ens.tag) + + + if len(annotations_nodes) > 0: + annotations = lxml.etree.SubElement(iri, "annotations") + for content in contentList: + if content.content_base.iri_id in annotations_nodes: + contentnode = annotations_nodes[content.content_base.iri_id] + if contentnode is not None: + if len(contentnode["ensembles"])>0: + content = lxml.etree.SubElement(annotation, "content") + content.set("id",contentnode["id"]) + content.text = u"" + else: + content = lxml.etree.SubElement(annotation, "content") + content.set("id",contentnode["id"]) + + else: + annotations = lxml.etree.SubElement(iri, "annotations") + + + displays = lxml.etree.SubElement(iri, "displays") + if len(contentList) > 0: + display = lxml.etree.SubElement(displays, "display") + display.set(u"id",u"0") + display.set(u"title",u"generated") + display.set(u"idsel",contentList[0].iri_id) + display.set(u"tc",u"0") for content in contentList: - if content.content_base.iri_id in annotations_nodes: - contentnode = annotations_nodes[content.content_base.iri_id] - if contentnode is not None: - if len(contentnode["ensembles"])>0: - content = lxml.etree.SubElement(annotation, "content") - content.set("id",contentnode["id"]) - content.text = u"" - else: - content = lxml.etree.SubElement(annotation, "content") - content.set("id",contentnode["id"]) - - else: - annotations = lxml.etree.SubElement(iri, "annotations") - - - displays = lxml.etree.SubElement(iri, "displays") - if len(contentList) > 0: - display = lxml.etree.SubElement(displays, "display") - display.set(u"id",u"0") - display.set(u"title",u"generated") - display.set(u"idsel",contentList[0].iri_id) - display.set(u"tc",u"0") - for content in contentList: - contentd = lxml.etree.SubElement(display,"content") - contentd.set(u"id",content.iri_id) + contentd = lxml.etree.SubElement(display,"content") + contentd.set(u"id",content.iri_id) filepath = urllib.urlopen(content.iri_url()) - - udoc = lxml.etree.parse(filepath) - res = udoc.xpath("/iri/body/ensembles/ensemble/decoupage") + + udoc = lxml.etree.parse(filepath) + res = udoc.xpath("/iri/body/ensembles/ensemble/decoupage") for decoupagenode in res: - decoupage_id = decoupagenode.getAttribute(u"id") - ensemble_id = decoupagenode.parentNode.getAttribute(u"id") - decoupage_id = decoupagenode.get(u"id") - ensemble_id = decoupagenode.getparent().get(u"id") - decoupage = lxml.etree.SubElement(content,"decoupage") - decoupage.set(u"id",decoupage_id) - decoupage.set(u"idens",ensemble_id) + decoupage_id = decoupagenode.get(u"id") + ensemble_id = decoupagenode.getparent().get(u"id") + decoupage_id = decoupagenode.get(u"id") + ensemble_id = decoupagenode.getparent().get(u"id") + decoupage = lxml.etree.SubElement(contentd,"decoupage") + decoupage.set(u"id",decoupage_id) + decoupage.set(u"idens",ensemble_id) if startSegment is not None: - activeSegment = lxml.etree.SubElement(display,"activeSegment") - idas = lxml.etree.SubElement(activeSegment,"id") - idas.set(u"idctt",startSegment["idcontent"]) + activeSegment = lxml.etree.SubElement(display,"activeSegment") + idas = lxml.etree.SubElement(activeSegment,"id") + idas.set(u"idctt",startSegment["idcontent"]) idas.set(u"idens" ,startSegment["idgroup"]) idas.set(u"idcut",startSegment["idcutting"]) idas.set(u"idseg",startSegment["idsegment"]) - - edits = lxml.etree.SubElement(iri, "edits") - - doc.write(file, pretty_print=True) + + edits = lxml.etree.SubElement(iri, "edits") + + doc.write(file, pretty_print=True) def generateInit(self, url, method, search=None): - - iri = lxml.etree.Element('iri') - impl = lxml.etree.ElementTree(iri) + + iri = lxml.etree.Element('iri') + impl = lxml.etree.ElementTree(iri) - elementFiles = lxml.etree.SubElement(iri,'files') - elementInit = lxml.etree.SubElement(elementFiles, 'init') - elementfile = lxml.etree.SubElement(elementInit, 'file') + elementFiles = lxml.etree.SubElement(iri,'files') + elementInit = lxml.etree.SubElement(elementFiles, 'init') + elementfile = lxml.etree.SubElement(elementInit, 'file') - elementfile.set('src',settings.WEB_URL + django.core.urlresolvers.reverse(method, args=url)) - elementfile.set('display', '1') - if(search): - elementfile.set("segsel",settings.WEB_URL + django.core.urlresolvers.reverse(search, args=url)) + elementfile.set('src',settings.WEB_URL + django.core.urlresolvers.reverse(method, args=url)) + elementfile.set('display', '1') + if(search): + elementfile.set("segsel",settings.WEB_URL + django.core.urlresolvers.reverse(search, args=url)) # /*chemin video : tant que le serveur de media n'est pas up, */ - elementfile.set('video', settings.STREAM_URL) - elementfile.set('pict', "") - elementfile.set('extra', "") + elementfile.set('video', settings.STREAM_URL) + elementfile.set('pict', "") + elementfile.set('extra', "") - elementRecent = lxml.etree.SubElement(elementFiles, 'recent') - elementLibrary = lxml.etree.SubElement(elementFiles, 'library') + elementRecent = lxml.etree.SubElement(elementFiles, 'recent') + elementLibrary = lxml.etree.SubElement(elementFiles, 'library') username = '' id = '' - elementUser = lxml.etree.SubElement(iri, 'user') - elementUser.set('name', username) - elementUser.set('id', id) + elementUser = lxml.etree.SubElement(iri, 'user') + elementUser.set('name', username) + elementUser.set('id', id) return iri def create_ldt(project, user): + """create xml""" + contentList = project.contents.all() - """create xml""" - # create a dom iri = lxml.etree.Element('iri') doc = lxml.etree.ElementTree(iri) @@ -203,16 +203,16 @@ for content in contentList: if not idsel: idsel = content.iri_id - elementMedia = lxml.etree.SubElement(elementMedias, 'media') - elementMedia.set('id', content.iri_id) - elementMedia.set('src', content.iri_url()) + elementMedia = lxml.etree.SubElement(elementMedias, 'media') + elementMedia.set('id', content.iri_id) + elementMedia.set('src', content.iri_url()) if content.videopath and content.videopath !="": - elementMedia.set('video', content.videopath) + elementMedia.set('video', content.videopath) else: - elementMedia.set('video', settings.STREAM_URL) - elementMedia.set('pict', "") - elementMedia.set('extra', "") + elementMedia.set('video', settings.STREAM_URL) + elementMedia.set('pict', "") + elementMedia.set('extra', "") if not idsel: idsel = "" @@ -234,8 +234,8 @@ #node content for content in contentList: - elementContent = lxml.etree.SubElement(elementDisplay, 'content') - elementContent.set('id', content.iri_id) + elementContent = lxml.etree.SubElement(elementDisplay, 'content') + elementContent.set('id', content.iri_id) if not 'http' in content.iriurl: #eg: "iiiielizabethrosse/ENMI08-III_elizabethrosse.iri" @@ -243,18 +243,17 @@ else: url =content.iriurl file = urllib.urlopen(url) - doc = lxml.etree.parse(file) - res = doc.xpath("/iri/body/ensembles/ensemble/decoupage") + doc = lxml.etree.parse(file) + res = doc.xpath("/iri/body/ensembles/ensemble/decoupage") - - #node decoupage + #node decoupage for decoupagenode in res: - decoupage_id = decoupagenode.attrib(u"id") - parent= decoupagenode.getparent() - ensemble_id = parent.attrib(u"id") - elementDecoupage = etree.SubElement(elementContent, 'decoupage') - elementDecoupage.set('idens', ensemble_id) - elementDecoupage.set('id', decoupage_id) + decoupage_id = decoupagenode.get(u"id") + parent= decoupagenode.getparent() + ensemble_id = parent.get(u"id") + elementDecoupage = lxml.etree.SubElement(elementContent, 'decoupage') + elementDecoupage.set('idens', ensemble_id) + elementDecoupage.set('id', decoupage_id) #node edits elementEdits = lxml.etree.SubElement(iri, 'edits') @@ -280,10 +279,10 @@ ldt = lxml.etree.fromstring(project.ldt.encode("utf-8")) res = ldt.xpath("/iri/project") for elementProject in res: - elementProject.set('abstract', "") - elementProject.set('title', new_project.title) - elementProject.set('user', user.username) - elementProject.set('id', new_project.ldt_id) + elementProject.set('abstract', "") + elementProject.set('title', new_project.title) + elementProject.set('user', user.username) + elementProject.set('id', new_project.ldt_id) new_project.ldt = lxml.etree.tostring(ldt, pretty_print=True) diff -r 6c3162d9e632 -r 3b70d84e661a web/ldt/ldt_utils/views.py --- a/web/ldt/ldt_utils/views.py Tue Oct 12 16:35:06 2010 +0200 +++ b/web/ldt/ldt_utils/views.py Tue Oct 12 19:09:13 2010 +0200 @@ -199,7 +199,8 @@ resp = HttpResponse(mimetype="text/xml") resp['Cache-Control']='no-cache, must-revalidate' resp['Pragma']='no-cache' - doc.write(resp, pretty_print=True) + + resp.write( etree.tostring(doc, pretty_print=True, xml_declaration=True, encoding="utf-8")) return resp def ldtProject(request, id): @@ -216,18 +217,18 @@ project = get_object_or_404(Project,ldt_id=id) - return project_json(request, project) + return project_json(request, project, False) def project_json_externalid(request, id): res_proj = get_list_or_404(Project.objects.order_by('-modification_date'),contents__external_id = id) - return project_json(request, res_proj[0]) + return project_json(request, res_proj[0], False) -def project_json(request, project): +def project_json(request, project, serialize_contents = True): if not ldt_auth.checkAccess(request.user, project): return HttpResponseForbidden(_("You can not access this project")) @@ -256,7 +257,7 @@ escape_bool = {'true': True, 'false': False, "0": False, "1": True}.get(escape_str.lower()) - ps = ProjectSerializer(project) + ps = ProjectSerializer(project, serialize_contents) project_dict = ps.serialize_to_cinelab() json_str = simplejson.dumps(project_dict, ensure_ascii=False, indent=indent) @@ -331,35 +332,31 @@ #save xml ldt ldtproject.ldt=ldt - ldtproj = get_attrib(ldtproject) - ldtproj.save() + + doc = lxml.etree.fromstring(ldtproject.ldt.encode( "utf-8" )) + result = doc.xpath("/iri/project") + + #set new title + ldtproject.title = result[0].get("title") + + #get new content list + new_contents=[] + result = doc.xpath("/iri/medias/media") + for medianode in result: + id = medianode.get("id") + new_contents.append(id) + + #set new content list + for c in ldtproject.contents.all(): + if not c.iri_id in new_contents: + ldtproject.contents.remove(c) + + ldtproject.save() else: ldt = '' - - return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':title, 'contents': new_contents}, context_instance=RequestContext(request)) - + new_contents=[] -def get_attrib(ldtproject): - - doc = lxml.etree.fromstring(ldtproject.ldt.encode( "utf-8" )) - result = doc.xpath("/iri/project") - - #set new title - ldtproject.title = result[0].get("title") - - #get new content list - new_contents=[] - result = doc.xpath("/iri/medias/media") - for medianode in result: - id = medianode.get("id") - new_contents.append(id) - - #set new content list - for c in ldtproject.contents.all(): - if not c.iri_id in new_contents: - ldtproject.contents.remove(c) - - return ldtproject + return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':ldtproject.title, 'contents': new_contents}, context_instance=RequestContext(request))