web/ldt/ldt_utils/utils.py
changeset 80 1e7732f40eee
parent 71 fc1210bbb854
child 85 3b70d84e661a
equal deleted inserted replaced
79:674a65969a14 80:1e7732f40eee
     1 import lucene
     1 import lucene
     2 from ldt.ldt_utils import STORE
     2 from ldt.ldt_utils import STORE
     3 from ldt.ldt_utils import ANALYZER
     3 from ldt.ldt_utils import ANALYZER
     4 from Ft.Xml import MarkupWriter
       
     5 import uuid
     4 import uuid
     6 import django.core.urlresolvers
     5 import django.core.urlresolvers
     7 from django.conf import settings
     6 from django.conf import settings
     8 import urllib
     7 import urllib
     9 import xml.dom
       
    10 import xml.dom.minidom
       
    11 import xml.dom.ext
       
    12 import xml.xpath
       
    13 import datetime
     8 import datetime
    14 import Ft
       
    15 import lxml.etree
     9 import lxml.etree
    16 
    10 
    17 __BOOLEAN_DICT = {
    11 __BOOLEAN_DICT = {
    18     'false':False,
    12     'false':False,
    19     'true':True,
    13     'true':True,
    55 
    49 
    56 class LdtUtils(object):
    50 class LdtUtils(object):
    57     
    51     
    58     def generateLdt(self, contentList, file, title = u"", author=u"IRI Web", web_url=u"", media_url="", startSegment = None, contributions=None):
    52     def generateLdt(self, contentList, file, title = u"", author=u"IRI Web", web_url=u"", media_url="", startSegment = None, contributions=None):
    59 
    53 
    60         writer = MarkupWriter(file, indent = u"yes")
    54 	iri = lxml.etree.Element(u'iri')
    61         writer.startDocument()
    55 	doc = lxml.etree.ElementTree(iri)
    62         writer.startElement(u"iri")
    56 
    63         writer.simpleElement(u"project", attributes={u"id":unicode(str(uuid.uuid1())), u"title":unicode(title) , u"user":author, u"abstract":u""})
    57 	project = lxml.etree.SubElement(iri, u'project')
    64         writer.startElement(u"medias")
    58 	project.set(u"id",unicode(str(uuid.uuid1())))
    65         for content in contentList:
    59         project.set(u"title",unicode(title))
    66             videopath = unicode(settings.STREAM_URL)
    60 	project.set(u"user",author)
    67             if content.videopath :
    61 	project.set(u"abstract",u"")
    68                 videopath = unicode(content.videopath)
    62 
    69             writer.simpleElement(u"media", attributes={u"id":content.iri_id,u"src":content.iri_url(web_url),u"video":videopath,u"pict":u"",u"extra":u""})
    63 	medias = lxml.etree.SubElement(iri, u"medias")
    70         writer.endElement(u"medias")
    64 	for content in contentList:
       
    65 	    videopath = unicode(settings.STREAM_URL)
       
    66 	    if content.videopath :
       
    67 		videopath = unicode(content.videopath)
       
    68 	    media = lxml.etree.SubElement(medias, "media")
       
    69 	    media.set(u"id",content.iri_id)
       
    70 	    media.set(u"src",content.iri_url(web_url))
       
    71 	    media.set(u"video",videopath)
       
    72             media.set(u"pict",u"")
       
    73             media.set(u"extra",u"")
    71 
    74 
    72         if contributions is None:
    75         if contributions is None:
    73             contributions = []
    76             contributions = []
    74         annotations_nodes = {}
    77         annotations_nodes = {}
    75         for contrib in contributions:
    78         for contrib in contributions:
    76             doc = xml.dom.minidom.parseString(contrib.ldtproject.ldt.encode("utf-8"))
    79 	    ldtdoc = lxml.etree.fromstring(contrib.ldtproject.ldt.encode("utf-8"))
    77             con = xml.xpath.Context.Context(doc, 1, 1, None)
    80 	    res = ldtdoc.xpath("/iri/annotations/content")
    78             res = xml.xpath.Evaluate("/iri/annotations/content", context=con)
    81 
    79             for content in res:
    82             for content in res:
    80                 contentid = content.getAttribute("id")
    83 		contentid = content.get("id")
    81                 if annotations_nodes.has_key(contentid):
    84                 if annotations_nodes.has_key(contentid):
    82                     contentnode = annotations_nodes[contentid]
    85                     contentnode = annotations_nodes[contentid]
    83                 else:
    86                 else:
    84                     contentnode = {"id":contentid, "ensembles":[]}
    87                     contentnode = {"id":contentid, "ensembles":[]}
    85                     annotations_nodes[contentid]=contentnode
    88                     annotations_nodes[contentid]=contentnode
    86                 for ens in content.childNodes:
    89                 for ens in content.childNodes:
    87                     if ens.nodeType == xml.dom.Node.ELEMENT_NODE and ens.tagName.endswith("ensemble"):
    90 		    if ens.tag.endswith("ensemble"):
    88                         contentnode["ensembles"].append(ens.toprettyxml())
    91 			contentnode["ensembles"].append(ens.tag)
       
    92 
    89 
    93 
    90         if len(annotations_nodes) > 0:
    94         if len(annotations_nodes) > 0:
    91             writer.startElement(u"annotations")
    95 	    annotations = lxml.etree.SubElement(iri, "annotations")
    92             for content in contentList:
    96             for content in contentList:
    93                 if content.content_base.iri_id in annotations_nodes:
    97                 if content.content_base.iri_id in annotations_nodes:
    94                     contentnode = annotations_nodes[content.content_base.iri_id]
    98                     contentnode = annotations_nodes[content.content_base.iri_id]
    95                     if contentnode is not None:
    99                     if contentnode is not None:
    96                         if len(contentnode["ensembles"])>0:
   100                         if len(contentnode["ensembles"])>0:
    97                             writer.startElement(u"content", attributes={"id":contentnode["id"]})
   101 			    content = lxml.etree.SubElement(annotation, "content")
    98                             writer.text(u"")
   102 			    content.set("id",contentnode["id"])
    99                             for ens in contentnode["ensembles"]:
   103                             content.text = u""
   100                                 writer.xmlFragment(ens.encode("utf-8"))
       
   101                             writer.endElement(u"content")
       
   102                         else:
   104                         else:
   103                             writer.simpleElement(u"content", attributes={"id":contentnode["id"]})
   105 			    content = lxml.etree.SubElement(annotation, "content")
   104             writer.endElement(u"annotations")
   106 			    content.set("id",contentnode["id"])
       
   107 
   105         else:
   108         else:
   106             writer.simpleElement(u"annotations")
   109 	    annotations = lxml.etree.SubElement(iri, "annotations")
   107 
   110 
   108 
   111 
   109         writer.startElement(u"displays")
   112 	displays = lxml.etree.SubElement(iri, "displays")
   110         if len(contentList) > 0:
   113         if len(contentList) > 0:
   111             writer.startElement(u"display", attributes={u"id":u"0",u"title":u"generated",u"idsel":contentList[0].iri_id,u"tc":u"0"})
   114 	    display = lxml.etree.SubElement(displays, "display")
       
   115 	    display.set(u"id",u"0")
       
   116 	    display.set(u"title",u"generated")
       
   117 	    display.set(u"idsel",contentList[0].iri_id)
       
   118 	    display.set(u"tc",u"0")
   112             for content in contentList:
   119             for content in contentList:
   113                 writer.startElement(u"content", attributes={u"id":content.iri_id})
   120 		contentd = lxml.etree.SubElement(display,"content")
       
   121 		contentd.set(u"id",content.iri_id)
   114                 filepath = urllib.urlopen(content.iri_url())
   122                 filepath = urllib.urlopen(content.iri_url())
   115                 doc = xml.dom.minidom.parse(filepath)
   123 		
   116                 con = xml.xpath.Context.Context(doc, 1, 1, None)
   124 		udoc = lxml.etree.parse(filepath)
   117                 res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble/decoupage", context=con)
   125 		res = udoc.xpath("/iri/body/ensembles/ensemble/decoupage")
   118                 for decoupagenode in res:
   126                 for decoupagenode in res:
   119                     decoupage_id = decoupagenode.getAttribute(u"id")
   127                     decoupage_id = decoupagenode.getAttribute(u"id")
   120                     ensemble_id = decoupagenode.parentNode.getAttribute(u"id")
   128                     ensemble_id = decoupagenode.parentNode.getAttribute(u"id")
   121                     writer.simpleElement(u"decoupage", attributes={u"id":decoupage_id,u"idens":ensemble_id})
   129 		    decoupage_id = decoupagenode.get(u"id")
   122                 writer.endElement(u"content")
   130 		    ensemble_id = decoupagenode.getparent().get(u"id")
       
   131 		    decoupage = lxml.etree.SubElement(content,"decoupage")
       
   132 		    decoupage.set(u"id",decoupage_id)
       
   133 		    decoupage.set(u"idens",ensemble_id)
   123             if startSegment is not None:
   134             if startSegment is not None:
   124                 writer.startElement(u"activeSegment")
   135 		activeSegment = lxml.etree.SubElement(display,"activeSegment")
   125                 writer.simpleElement(u"id",attributes={u"idctt" : startSegment["idcontent"],u"idens" : startSegment["idgroup"], u"idcut" : startSegment["idcutting"], u"idseg" : startSegment["idsegment"]})
   136 		idas = lxml.etree.SubElement(activeSegment,"id")
   126                 writer.endElement(u"activeSegment")
   137 		idas.set(u"idctt",startSegment["idcontent"])
   127 
   138                 idas.set(u"idens" ,startSegment["idgroup"])
   128             writer.endElement(u"display")
   139                 idas.set(u"idcut",startSegment["idcutting"])
   129         writer.endElement(u"displays")
   140                 idas.set(u"idseg",startSegment["idsegment"])
   130         writer.simpleElement(u"edits")
   141 
   131         writer.endElement(u"iri")
   142 	edits = lxml.etree.SubElement(iri, "edits")
       
   143 	
       
   144 	doc.write(file, pretty_print=True)
       
   145 
   132 
   146 
   133     def generateInit(self, url, method, search=None):
   147     def generateInit(self, url, method, search=None):
   134         
   148         
   135         import xml.dom
   149 	iri = lxml.etree.Element('iri')
   136         import xml.dom.ext
   150 	impl = lxml.etree.ElementTree(iri)
   137     
   151  
   138         impl = xml.dom.getDOMImplementation()
   152 	elementFiles = lxml.etree.SubElement(iri,'files')    
   139         doc = impl.createDocument(xml.dom.EMPTY_NAMESPACE, 'iri', None)
   153 	elementInit = lxml.etree.SubElement(elementFiles, 'init')
   140     
   154 	elementfile = lxml.etree.SubElement(elementInit, 'file')
   141         elementFiles = doc.createElement('files')
       
   142         doc.documentElement.appendChild(elementFiles)
       
   143     
       
   144         elementInit = doc.createElement('init')
       
   145         elementFiles.appendChild(elementInit)
       
   146     
       
   147         elementfile = doc.createElement('file')
       
   148             
   155             
   149         elementfile.setAttribute('src',settings.WEB_URL + django.core.urlresolvers.reverse(method, args=url))
   156 	elementfile.set('src',settings.WEB_URL + django.core.urlresolvers.reverse(method, args=url))
   150         elementfile.setAttribute('display', '1')
   157 	elementfile.set('display', '1')
   151         if(search):
   158 	if(search):
   152             elementfile.setAttribute("segsel",settings.WEB_URL + django.core.urlresolvers.reverse(search, args=url))
   159 	    elementfile.set("segsel",settings.WEB_URL + django.core.urlresolvers.reverse(search, args=url))   
   153     
   160 
   154     
   161     
   155         # /*chemin video : tant que le serveur de media n'est pas up, */
   162         # /*chemin video : tant que le serveur de media n'est pas up, */
   156         elementfile.setAttribute('video', settings.STREAM_URL)
   163 	elementfile.set('video', settings.STREAM_URL)
   157         elementfile.setAttribute('pict', "")
   164 	elementfile.set('pict', "")
   158         elementfile.setAttribute('extra', "")
   165 	elementfile.set('extra', "")    
   159     
   166 
   160         elementInit.appendChild(elementfile);
   167     	elementRecent = lxml.etree.SubElement(elementFiles, 'recent')
   161     
   168 	elementLibrary = lxml.etree.SubElement(elementFiles, 'library')
   162         elementRecent = doc.createElement('recent');
       
   163         elementFiles.appendChild(elementRecent);
       
   164     
       
   165     
       
   166         elementLibrary = doc.createElement('library');
       
   167         elementFiles.appendChild(elementLibrary);
       
   168     
   169     
   169         username = ''
   170         username = ''
   170         id = ''
   171         id = ''
   171         elementUser = doc.createElement('user')
   172 
   172         elementUser.setAttribute('name', username)
   173 	elementUser = lxml.etree.SubElement(iri, 'user')
   173         elementUser.setAttribute('id', id)
   174 	elementUser.set('name', username)
   174         doc.documentElement.appendChild(elementUser)
   175 	elementUser.set('id', id)
   175         
   176         
   176         return doc
   177         return iri 
       
   178 
       
   179 
   177 
   180 
   178 def create_ldt(project, user):
   181 def create_ldt(project, user):
   179     
   182     
   180     contentList=project.contents.all()
   183     contentList = project.contents.all()
   181     
   184     
   182     """create xml"""
   185     """create xml"""
   183     
   186     
   184     # create a dom
   187     # create a dom
   185     impl = xml.dom.getDOMImplementation()
   188     iri = lxml.etree.Element('iri')
   186     dom = impl.createDocument(xml.dom.EMPTY_NAMESPACE, 'iri', None)
   189     doc = lxml.etree.ElementTree(iri)
       
   190     
   187     #node project
   191     #node project
   188     elementProject = dom.createElement('project')
   192     elementProject = lxml.etree.SubElement(iri, 'project')
   189     dom.documentElement.appendChild(elementProject)
   193     
   190     
   194     elementProject.set('abstract', "")
   191     
   195     elementProject.set('title', project.title)
   192     elementProject.setAttribute('abstract', "")
   196     elementProject.set('user', user.username)
   193     elementProject.setAttribute('title', project.title)
   197     elementProject.set('id', project.ldt_id)
   194     elementProject.setAttribute('user', user.username)
   198 
   195     elementProject.setAttribute('id', project.ldt_id)
       
   196     #node medias
   199     #node medias
   197     elementMedias = dom.createElement('medias')
   200     elementMedias = lxml.etree.SubElement(iri, 'medias')
   198     dom.documentElement.appendChild(elementMedias)
       
   199     
   201     
   200     idsel = None      
   202     idsel = None      
   201     for content in contentList:
   203     for content in contentList:
   202         if not idsel:
   204         if not idsel:
   203             idsel = content.iri_id
   205             idsel = content.iri_id
   204         elementMedia = dom.createElement('media')            
   206 	elementMedia = lxml.etree.SubElement(elementMedias, 'media')
   205         elementMedia.setAttribute('id', content.iri_id)
   207 	elementMedia.set('id', content.iri_id)
   206         elementMedia.setAttribute('src', content.iri_url())
   208 	elementMedia.set('src', content.iri_url())
       
   209 
   207         if content.videopath and content.videopath !="":
   210         if content.videopath and content.videopath !="":
   208             elementMedia.setAttribute('video', content.videopath)
   211 	    elementMedia.set('video', content.videopath)
   209         else:
   212         else:
   210             elementMedia.setAttribute('video', settings.STREAM_URL)
   213 	    elementMedia.set('video', settings.STREAM_URL)
   211         elementMedia.setAttribute('pict', "")
   214 	elementMedia.set('pict', "")
   212         elementMedia.setAttribute('extra', "")
   215 	elementMedia.set('extra', "")
   213         elementMedias.appendChild(elementMedia)
   216 
   214     if not idsel:
   217     if not idsel:
   215         idsel = ""
   218         idsel = ""
   216 
   219 
   217     #node annotations
   220     #node annotations
   218     elementAnnotations = dom.createElement('annotations')
   221     elementAnnotations = lxml.etree.SubElement(iri, 'annotations')
   219     dom.documentElement.appendChild(elementAnnotations)
   222     
   220     #node displays
   223     #node displays
   221     elementDisplays = dom.createElement('displays')
   224     elementDisplays = lxml.etree.SubElement(iri, 'displays')
   222     elementDisplay = dom.createElement('display')
   225     elementDisplay = lxml.etree.SubElement(elementDisplays, 'display')
   223     elementDisplay.setAttribute('id', '0')
   226     elementDisplay.set('id', '0')
   224     elementDisplay.setAttribute('title', 'Init view')
   227     elementDisplay.set('title', 'Init view')
   225     elementDisplay.setAttribute('idsel', idsel)
   228     elementDisplay.set('idsel', idsel)
   226     elementDisplay.setAttribute('tc', '0')
   229     elementDisplay.set('tc', '0')
   227     elementDisplay.setAttribute('zoom', '0')
   230     elementDisplay.set('zoom', '0')
   228     elementDisplay.setAttribute('scroll', '0')
   231     elementDisplay.set('scroll', '0')
   229     elementDisplay.setAttribute('infoBAB', '')
   232     elementDisplay.set('infoBAB', '')
       
   233 
       
   234     
   230     #node content
   235     #node content
   231     for content in contentList:
   236     for content in contentList:
   232         elementContent = dom.createElement('content')
   237 	elementContent = lxml.etree.SubElement(elementDisplay, 'content')
   233         elementContent.setAttribute('id', content.iri_id)
   238 	elementContent.set('id', content.iri_id)
       
   239 
   234         if not 'http' in content.iriurl:
   240         if not 'http' in content.iriurl:
   235         #eg: "iiiielizabethrosse/ENMI08-III_elizabethrosse.iri"
   241         #eg: "iiiielizabethrosse/ENMI08-III_elizabethrosse.iri"
   236             url = content.iri_url()
   242             url = content.iri_url()
   237         else:
   243         else:
   238             url =content.iriurl
   244             url =content.iriurl
   239         file = urllib.urlopen(url)
   245         file = urllib.urlopen(url)
   240         doc = xml.dom.minidom.parse(file)
   246 	doc = lxml.etree.parse(file)
   241         con = xml.xpath.Context.Context(doc, 1, 1, None)
   247 	res = doc.xpath("/iri/body/ensembles/ensemble/decoupage")        
   242         res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble/decoupage", context=con)
   248 
   243         #node decoupage
   249 
       
   250 	#node decoupage
   244         for decoupagenode in res:
   251         for decoupagenode in res:
   245             decoupage_id = decoupagenode.getAttribute(u"id")
   252 	    decoupage_id = decoupagenode.attrib(u"id")
   246             ensemble_id = decoupagenode.parentNode.getAttribute(u"id")
   253 	    parent= decoupagenode.getparent()
   247             elementDecoupage = dom.createElement('decoupage')
   254 	    ensemble_id = parent.attrib(u"id")
   248             elementDecoupage.setAttribute('idens', ensemble_id)
   255 	    elementDecoupage = etree.SubElement(elementContent, 'decoupage')
   249             elementDecoupage.setAttribute('id', decoupage_id)
   256 	    elementDecoupage.set('idens', ensemble_id)
   250             elementContent.appendChild(elementDecoupage)     
   257 	    elementDecoupage.set('id', decoupage_id)
   251         elementDisplay.appendChild(elementContent)   
   258     
   252     
   259     #node edits
   253     elementDisplays.appendChild(elementDisplay)
   260     elementEdits = lxml.etree.SubElement(iri, 'edits')
   254     dom.documentElement.appendChild(elementDisplays)
   261     
   255     
   262     #write dom in Project.ldt 
   256     elementEdits = dom.createElement('edits')
   263     project.ldt = lxml.etree.tostring(iri, pretty_print=True)
   257     dom.documentElement.appendChild(elementEdits)
   264     
   258     # write dom in Project.ldt 
       
   259     project.ldt = dom.documentElement.toprettyxml()
       
   260     #save Project
   265     #save Project
   261     project.save()
   266     project.save()
   262     return project        
   267     return project        
   263 
   268 
   264 
   269 
   270     
   275     
   271     contentList=project.contents.all()
   276     contentList=project.contents.all()
   272     
   277     
   273     """create xml"""
   278     """create xml"""
   274     
   279     
   275     # create a dom
   280     ldt = lxml.etree.fromstring(project.ldt.encode("utf-8"))
   276     dom = xml.dom.minidom.parseString(project.ldt.encode("utf-8"))
   281     res = ldt.xpath("/iri/project")
   277     con = xml.xpath.Context.Context(dom, 1, 1, None)
       
   278     res = xml.xpath.Evaluate("iri/project", context=con)
       
   279     for elementProject in res:
   282     for elementProject in res:
   280         elementProject.setAttribute('abstract', "")
   283 	elementProject.set('abstract', "")
   281         elementProject.setAttribute('title', new_project.title)
   284 	elementProject.set('title', new_project.title)
   282         elementProject.setAttribute('user', user.username)
   285 	elementProject.set('user', user.username)
   283         elementProject.setAttribute('id', new_project.ldt_id)
   286 	elementProject.set('id', new_project.ldt_id)
   284         
   287         
   285     new_project.ldt = dom.documentElement.toprettyxml()
   288     new_project.ldt = lxml.etree.tostring(ldt, pretty_print=True)
       
   289 
   286     #save Project
   290     #save Project
   287     new_project.save()
   291     new_project.save()
   288     return new_project
   292     return new_project
   289 
   293 
   290 def create_empty_iri(file, content, username):
   294 def create_empty_iri(file, content, username):
   291     
   295     
   292     writer = MarkupWriter(file, indent = u"yes")
   296     iri = lxml.etree.Element('iri')
   293     writer.startDocument()
   297     doc = lxml.etree.ElementTree(iri)
   294     writer.startElement(u"iri")
   298 
   295     
   299     head = lxml.etree.SubElement(iri, 'head')
   296     writer.startElement(u"head")
   300     meta1 = lxml.etree.SubElement(head, 'meta')
   297     
   301     meta1.set(u'name', u'id')
   298     writer.simpleElement(u'meta', attributes={u'name':u'id', 'content':unicode(content.iri_id)})
   302     meta1.set(u'content', unicode(content.iri_id))
   299     writer.simpleElement(u'meta', attributes={u'name':u'title', 'content':unicode(content.title)})
   303     meta2 = lxml.etree.SubElement(head, 'meta')
   300     writer.simpleElement(u'meta', attributes={u'name':u'abstract', 'content':unicode(content.description)})
   304     meta2.set(u'name',u'title')
   301     writer.simpleElement(u'meta', attributes={u'name':u'author', 'content':unicode(username)})
   305     meta2.set(u'content', unicode(content.title))
   302     writer.simpleElement(u'meta', attributes={u'name':u'contributor', 'content':unicode(username)})
   306     meta3 = lxml.etree.SubElement(head, 'meta')
   303     writer.simpleElement(u'meta', attributes={u'name':u'date', 'content':unicode(datetime.date.today().isoformat())})
   307     meta3.set(u'name',u'abstract')
   304     writer.simpleElement(u'meta', attributes={u'name':u'copyright', 'content':u'IRI'})
   308     meta3.set(u'content', unicode(content.description))
   305     writer.simpleElement(u'meta', attributes={u'name':u'type', 'content':u'video'})    
   309     meta4 = lxml.etree.SubElement(head, 'meta')
   306     
   310     meta4.set(u'name',u'author')
   307     writer.endElement(u"head")
   311     meta4.set(u'content', unicode(username))
   308 
   312     meta5 = lxml.etree.SubElement(head, 'meta')
   309     writer.startElement(u"body")
   313     meta5.set(u'name',u'contributor')
   310     
   314     meta5.set(u'content', unicode(username))
   311     writer.startElement(u"ensembles")
   315     meta6 = lxml.etree.SubElement(head, 'meta')
   312     writer.endElement(u"ensembles")
   316     meta6.set(u'name',u'date')
   313     
   317     meta6.set(u'content', unicode(datetime.date.today().isoformat()))
   314     writer.simpleElement(u'links')
   318     meta7 = lxml.etree.SubElement(head, 'meta')
   315     writer.startElement(u"medias")
   319     meta7.set(u'name',u'copyright')
   316 
   320     meta7.set(u'content', u'IRI')
   317     writer.startElement(u"media", attributes={u'id':u'video'})
   321     meta8 = lxml.etree.SubElement(head, 'meta')
   318     writer.simpleElement(u'video', attributes={u'src':unicode(content.stream_src),u'id':unicode(content.iri_id),u'dur':unicode(content.duration),u'begin':u'0'})
   322     meta8.set(u'name', u'type')
   319     writer.endElement(u"media")
   323     meta8.set(u'content', u'video')
   320 
   324 
   321     writer.startElement(u"media", attributes={u'id':u'tool'})
   325     body = lxml.etree.SubElement(iri, 'body')
   322     writer.simpleElement(u'tool')
   326     ensembles = lxml.etree.SubElement(body, 'ensembles')
   323     writer.endElement(u"media")
   327     links = lxml.etree.SubElement(body, 'links')
   324 
   328 
   325     writer.endElement(u"medias")
   329     medias = lxml.etree.SubElement(body, 'medias')
   326     
   330 
   327     #writer.startElement(u'display', attributes={u'id':unicode(uuid.uuid1()), u'title':u"default", u"idsel":unicode(content.iri_id), u"tc":u"0", u"zoom":u"0", u"scroll":u"0", u"infoBAB":u""})
   331     media1 = lxml.etree.SubElement(medias, 'media')
   328     writer.simpleElement(u'display')
   332     media1.set(u'id',u'video')
   329     
   333     video = lxml.etree.SubElement(media1, 'video')
   330     writer.endElement(u"body")
   334     video.set(u'src',unicode(content.stream_src))
   331 
   335     video.set(u'id',unicode(content.iri_id))
   332     
   336     video.set(u'dur',unicode(content.duration))
   333     writer.endElement(u"iri")
   337     video.set(u'begin',u'0')
   334     writer.endDocument()
   338 
   335     
   339     media2 = lxml.etree.SubElement(medias, 'media')
       
   340     media2.set(u'id',u'tool')
       
   341     tool = lxml.etree.SubElement(media2, 'tool')
       
   342 
       
   343     display = lxml.etree.SubElement(body, 'display')
       
   344 
       
   345     doc.write(file, pretty_print=True)
       
   346 
       
   347 
   336 def update_iri(filepath, content, username):
   348 def update_iri(filepath, content, username):
   337     
   349     
   338     # open xml
   350     # open xml
   339     doc = lxml.etree.parse(filepath)
   351     doc = lxml.etree.parse(filepath)
   340     
   352