web/ldt/ldt_utils/utils.py
changeset 54 24397932219d
parent 16 b3692a42ac79
child 57 3a3c15c462f8
--- a/web/ldt/ldt_utils/utils.py	Thu Jun 17 11:24:33 2010 +0200
+++ b/web/ldt/ldt_utils/utils.py	Thu Jun 17 15:04:36 2010 +0200
@@ -1,314 +1,354 @@
-import lucene
-from ldt.ldt_utils import STORE
-from ldt.ldt_utils import ANALYZER
-from Ft.Xml import MarkupWriter
-import uuid
-import django.core.urlresolvers
-from django.conf import settings
-import urllib
-import xml.dom
-import xml.dom.minidom
-import xml.dom.ext
-import xml.xpath
-import os
-import os.path
-import datetime
-
-class LdtSearch(object):
-
-    def query(self, field, query):
-        indexSearcher = lucene.IndexSearcher(STORE)
-        queryParser = lucene.QueryParser(lucene.Version.LUCENE_30, field, lucene.FrenchAnalyzer(lucene.Version.LUCENE_30))
-        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)
-            res.append({"iri_id":doc.get("iri_id"),"ensemble_id":doc.get("ensemble_id"),"decoupage_id":doc.get("decoupage_id"), "element_id":doc.get("element_id")})
-        indexSearcher.close()
-        return res
-
-    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):
-
-        writer = MarkupWriter(file, indent = u"yes")
-        writer.startDocument()
-        writer.startElement(u"iri")
-        writer.simpleElement(u"project", attributes={u"id":unicode(str(uuid.uuid1())), u"title":unicode(title) , u"user":author, u"abstract":u""})
-        writer.startElement(u"medias")
-        for content in contentList:
-            videopath = unicode(settings.STREAM_URL)
-            if content.videopath :
-                videopath = unicode(content.videopath)
-            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""})
-        writer.endElement(u"medias")
-
-        if contributions is None:
-            contributions = []
-        annotations_nodes = {}
-        for contrib in contributions:
-            doc = xml.dom.minidom.parseString(contrib.ldtproject.ldt.encode("utf-8"))
-            con = xml.xpath.Context.Context(doc, 1, 1, None)
-            res = xml.xpath.Evaluate("/iri/annotations/content", context=con)
-            for content in res:
-                contentid = content.getAttribute("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.nodeType == xml.dom.Node.ELEMENT_NODE and ens.tagName.endswith("ensemble"):
-                        contentnode["ensembles"].append(ens.toprettyxml())
-
-        if len(annotations_nodes) > 0:
-            writer.startElement(u"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:
-                            writer.startElement(u"content", attributes={"id":contentnode["id"]})
-                            writer.text(u"")
-                            for ens in contentnode["ensembles"]:
-                                writer.xmlFragment(ens.encode("utf-8"))
-                            writer.endElement(u"content")
-                        else:
-                            writer.simpleElement(u"content", attributes={"id":contentnode["id"]})
-            writer.endElement(u"annotations")
-        else:
-            writer.simpleElement(u"annotations")
-
-
-        writer.startElement(u"displays")
-        if len(contentList) > 0:
-            writer.startElement(u"display", attributes={u"id":u"0",u"title":u"generated",u"idsel":contentList[0].iri_id,u"tc":u"0"})
-            for content in contentList:
-                writer.startElement(u"content", attributes={u"id":content.iri_id})
-                filepath = urllib.urlopen(content.iri_url())
-                doc = xml.dom.minidom.parse(filepath)
-                con = xml.xpath.Context.Context(doc, 1, 1, None)
-                res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble/decoupage", context=con)
-                for decoupagenode in res:
-                    decoupage_id = decoupagenode.getAttribute(u"id")
-                    ensemble_id = decoupagenode.parentNode.getAttribute(u"id")
-                    writer.simpleElement(u"decoupage", attributes={u"id":decoupage_id,u"idens":ensemble_id})
-                writer.endElement(u"content")
-            if startSegment is not None:
-                writer.startElement(u"activeSegment")
-                writer.simpleElement(u"id",attributes={u"idctt" : startSegment["idcontent"],u"idens" : startSegment["idgroup"], u"idcut" : startSegment["idcutting"], u"idseg" : startSegment["idsegment"]})
-                writer.endElement(u"activeSegment")
-
-            writer.endElement(u"display")
-        writer.endElement(u"displays")
-        writer.simpleElement(u"edits")
-        writer.endElement(u"iri")
-
-    def generateInit(self, url, method, search=None):
-        
-        import xml.dom
-        import xml.dom.ext
-    
-        impl = xml.dom.getDOMImplementation()
-        doc = impl.createDocument(xml.dom.EMPTY_NAMESPACE, 'iri', None)
-    
-        elementFiles = doc.createElement('files')
-        doc.documentElement.appendChild(elementFiles)
-    
-        elementInit = doc.createElement('init')
-        elementFiles.appendChild(elementInit)
-    
-        elementfile = doc.createElement('file')
-            
-        elementfile.setAttribute('src',settings.WEB_URL + django.core.urlresolvers.reverse(method, args=url))
-        elementfile.setAttribute('display', '1')
-        if(search):
-            elementfile.setAttribute("segsel",settings.WEB_URL + django.core.urlresolvers.reverse(search, args=url))
-    
-    
-        # /*chemin video : tant que le serveur de media n'est pas up, */
-        elementfile.setAttribute('video', settings.STREAM_URL)
-        elementfile.setAttribute('pict', "")
-        elementfile.setAttribute('extra', "")
-    
-        elementInit.appendChild(elementfile);
-    
-        elementRecent = doc.createElement('recent');
-        elementFiles.appendChild(elementRecent);
-    
-    
-        elementLibrary = doc.createElement('library');
-        elementFiles.appendChild(elementLibrary);
-    
-        username = ''
-        id = ''
-        elementUser = doc.createElement('user')
-        elementUser.setAttribute('name', username)
-        elementUser.setAttribute('id', id)
-        doc.documentElement.appendChild(elementUser)
-        
-        return doc
-
-def create_ldt(project, user):
-    
-    contentList=project.contents.all()
-    
-    """create xml"""
-    
-    # create a dom
-    impl = xml.dom.getDOMImplementation()
-    dom = impl.createDocument(xml.dom.EMPTY_NAMESPACE, 'iri', None)
-    #node project
-    elementProject = dom.createElement('project')
-    dom.documentElement.appendChild(elementProject)
-    
-    
-    elementProject.setAttribute('abstract', "")
-    elementProject.setAttribute('title', project.title)
-    elementProject.setAttribute('user', user.username)
-    elementProject.setAttribute('id', project.ldt_id)
-    #node medias
-    elementMedias = dom.createElement('medias')
-    dom.documentElement.appendChild(elementMedias)
-    
-    idsel = None      
-    for content in contentList:
-        if not idsel:
-            idsel = content.iri_id
-        elementMedia = dom.createElement('media')            
-        elementMedia.setAttribute('id', content.iri_id)
-        elementMedia.setAttribute('src', content.iri_url())
-        if content.videopath and content.videopath !="":
-            elementMedia.setAttribute('video', content.videopath)
-        else:
-            elementMedia.setAttribute('video', settings.STREAM_URL)
-        elementMedia.setAttribute('pict', "")
-        elementMedia.setAttribute('extra', "")
-        elementMedias.appendChild(elementMedia)
-    if not idsel:
-        idsel = ""
-
-    #node annotations
-    elementAnnotations = dom.createElement('annotations')
-    dom.documentElement.appendChild(elementAnnotations)
-    #node displays
-    elementDisplays = dom.createElement('displays')
-    elementDisplay = dom.createElement('display')
-    elementDisplay.setAttribute('id', '0')
-    elementDisplay.setAttribute('title', 'Init view')
-    elementDisplay.setAttribute('idsel', idsel)
-    elementDisplay.setAttribute('tc', '0')
-    elementDisplay.setAttribute('zoom', '0')
-    elementDisplay.setAttribute('scroll', '0')
-    elementDisplay.setAttribute('infoBAB', '')
-    #node content
-    for content in contentList:
-        elementContent = dom.createElement('content')
-        elementContent.setAttribute('id', content.iri_id)
-        if not 'http' in content.iriurl:
-        #eg: "iiiielizabethrosse/ENMI08-III_elizabethrosse.iri"
-            url = content.iri_url()
-        else:
-            url =content.iriurl
-        file = urllib.urlopen(url)
-        doc = xml.dom.minidom.parse(file)
-        con = xml.xpath.Context.Context(doc, 1, 1, None)
-        res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble/decoupage", context=con)
-        #node decoupage
-        for decoupagenode in res:
-            decoupage_id = decoupagenode.getAttribute(u"id")
-            ensemble_id = decoupagenode.parentNode.getAttribute(u"id")
-            elementDecoupage = dom.createElement('decoupage')
-            elementDecoupage.setAttribute('idens', ensemble_id)
-            elementDecoupage.setAttribute('id', decoupage_id)
-            elementContent.appendChild(elementDecoupage)     
-        elementDisplay.appendChild(elementContent)   
-    
-    elementDisplays.appendChild(elementDisplay)
-    dom.documentElement.appendChild(elementDisplays)
-    
-    elementEdits = dom.createElement('edits')
-    dom.documentElement.appendChild(elementEdits)
-    # write dom in Project.ldt 
-    project.ldt = dom.documentElement.toprettyxml()
-    #save Project
-    project.save()
-    return project        
-
-
-def copy_ldt(project, new_project, user):
-    new_project.ldt_id = str(uuid.uuid1())
-    new_project.created_by=user.username
-    new_project.changed_by=user.username
-    new_project.state = 1
-    
-    contentList=project.contents.all()
-    
-    """create xml"""
-    
-    # create a dom
-    dom = xml.dom.minidom.parseString(project.ldt.encode("utf-8"))
-    con = xml.xpath.Context.Context(dom, 1, 1, None)
-    res = xml.xpath.Evaluate("iri/project", context=con)
-    for elementProject in res:
-        elementProject.setAttribute('abstract', "")
-        elementProject.setAttribute('title', new_project.title)
-        elementProject.setAttribute('user', user.username)
-        elementProject.setAttribute('id', new_project.ldt_id)
-        
-    new_project.ldt = dom.documentElement.toprettyxml()
-    #save Project
-    new_project.save()
-    return new_project
-
-def create_empty_iri(file, content, username):
-    
-    writer = MarkupWriter(file, indent = u"yes")
-    writer.startDocument()
-    writer.startElement(u"iri")
-    
-    writer.startElement(u"head")
-    
-    writer.simpleElement(u'meta', attributes={u'name':u'id', 'content':unicode(content.iri_id)})
-    writer.simpleElement(u'meta', attributes={u'name':u'title', 'content':unicode(content.title)})
-    writer.simpleElement(u'meta', attributes={u'name':u'author', 'content':unicode(username)})
-    writer.simpleElement(u'meta', attributes={u'name':u'contributor', 'content':unicode(username)})
-    writer.simpleElement(u'meta', attributes={u'name':u'date', 'content':unicode(datetime.date.today().isoformat())})
-    writer.simpleElement(u'meta', attributes={u'name':u'copyright', 'content':u'IRI'})
-    writer.simpleElement(u'meta', attributes={u'name':u'type', 'content':u'video'})    
-    
-    writer.endElement(u"head")
-
-    writer.startElement(u"body")
-    
-    writer.startElement(u"ensembles")
-    writer.endElement(u"ensembles")
-    
-    writer.simpleElement(u'links')
-    writer.startElement(u"medias")
-
-    writer.startElement(u"media", attributes={u'id':u'video'})
-    writer.simpleElement(u'video', attributes={u'src':unicode(content.src),u'id':unicode(uuid.uuid1()),u'dur':unicode(content.duration),u'begin':u'0'})
-    writer.endElement(u"media")
-
-    writer.startElement(u"media", attributes={u'id':u'tool'})
-    writer.simpleElement(u'tool')
-    writer.endElement(u"media")
-
-    writer.endElement(u"medias")
-    
-    #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""})
-    writer.simpleElement(u'display')
-    
-    writer.endElement(u"body")
-
-    
-    writer.endElement(u"iri")
-    writer.endDocument()
-    
+import lucene
+from ldt.ldt_utils import STORE
+from ldt.ldt_utils import ANALYZER
+from Ft.Xml import MarkupWriter
+import uuid
+import django.core.urlresolvers
+from django.conf import settings
+import urllib
+import xml.dom
+import xml.dom.minidom
+import xml.dom.ext
+import xml.xpath
+import datetime
+import Ft
+
+class LdtSearch(object):
+
+    def query(self, field, query):
+        indexSearcher = lucene.IndexSearcher(STORE)
+        queryParser = lucene.QueryParser(lucene.Version.LUCENE_30, field, lucene.FrenchAnalyzer(lucene.Version.LUCENE_30))
+        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)
+            res.append({"iri_id":doc.get("iri_id"),"ensemble_id":doc.get("ensemble_id"),"decoupage_id":doc.get("decoupage_id"), "element_id":doc.get("element_id")})
+        indexSearcher.close()
+        return res
+
+    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):
+
+        writer = MarkupWriter(file, indent = u"yes")
+        writer.startDocument()
+        writer.startElement(u"iri")
+        writer.simpleElement(u"project", attributes={u"id":unicode(str(uuid.uuid1())), u"title":unicode(title) , u"user":author, u"abstract":u""})
+        writer.startElement(u"medias")
+        for content in contentList:
+            videopath = unicode(settings.STREAM_URL)
+            if content.videopath :
+                videopath = unicode(content.videopath)
+            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""})
+        writer.endElement(u"medias")
+
+        if contributions is None:
+            contributions = []
+        annotations_nodes = {}
+        for contrib in contributions:
+            doc = xml.dom.minidom.parseString(contrib.ldtproject.ldt.encode("utf-8"))
+            con = xml.xpath.Context.Context(doc, 1, 1, None)
+            res = xml.xpath.Evaluate("/iri/annotations/content", context=con)
+            for content in res:
+                contentid = content.getAttribute("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.nodeType == xml.dom.Node.ELEMENT_NODE and ens.tagName.endswith("ensemble"):
+                        contentnode["ensembles"].append(ens.toprettyxml())
+
+        if len(annotations_nodes) > 0:
+            writer.startElement(u"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:
+                            writer.startElement(u"content", attributes={"id":contentnode["id"]})
+                            writer.text(u"")
+                            for ens in contentnode["ensembles"]:
+                                writer.xmlFragment(ens.encode("utf-8"))
+                            writer.endElement(u"content")
+                        else:
+                            writer.simpleElement(u"content", attributes={"id":contentnode["id"]})
+            writer.endElement(u"annotations")
+        else:
+            writer.simpleElement(u"annotations")
+
+
+        writer.startElement(u"displays")
+        if len(contentList) > 0:
+            writer.startElement(u"display", attributes={u"id":u"0",u"title":u"generated",u"idsel":contentList[0].iri_id,u"tc":u"0"})
+            for content in contentList:
+                writer.startElement(u"content", attributes={u"id":content.iri_id})
+                filepath = urllib.urlopen(content.iri_url())
+                doc = xml.dom.minidom.parse(filepath)
+                con = xml.xpath.Context.Context(doc, 1, 1, None)
+                res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble/decoupage", context=con)
+                for decoupagenode in res:
+                    decoupage_id = decoupagenode.getAttribute(u"id")
+                    ensemble_id = decoupagenode.parentNode.getAttribute(u"id")
+                    writer.simpleElement(u"decoupage", attributes={u"id":decoupage_id,u"idens":ensemble_id})
+                writer.endElement(u"content")
+            if startSegment is not None:
+                writer.startElement(u"activeSegment")
+                writer.simpleElement(u"id",attributes={u"idctt" : startSegment["idcontent"],u"idens" : startSegment["idgroup"], u"idcut" : startSegment["idcutting"], u"idseg" : startSegment["idsegment"]})
+                writer.endElement(u"activeSegment")
+
+            writer.endElement(u"display")
+        writer.endElement(u"displays")
+        writer.simpleElement(u"edits")
+        writer.endElement(u"iri")
+
+    def generateInit(self, url, method, search=None):
+        
+        import xml.dom
+        import xml.dom.ext
+    
+        impl = xml.dom.getDOMImplementation()
+        doc = impl.createDocument(xml.dom.EMPTY_NAMESPACE, 'iri', None)
+    
+        elementFiles = doc.createElement('files')
+        doc.documentElement.appendChild(elementFiles)
+    
+        elementInit = doc.createElement('init')
+        elementFiles.appendChild(elementInit)
+    
+        elementfile = doc.createElement('file')
+            
+        elementfile.setAttribute('src',settings.WEB_URL + django.core.urlresolvers.reverse(method, args=url))
+        elementfile.setAttribute('display', '1')
+        if(search):
+            elementfile.setAttribute("segsel",settings.WEB_URL + django.core.urlresolvers.reverse(search, args=url))
+    
+    
+        # /*chemin video : tant que le serveur de media n'est pas up, */
+        elementfile.setAttribute('video', settings.STREAM_URL)
+        elementfile.setAttribute('pict', "")
+        elementfile.setAttribute('extra', "")
+    
+        elementInit.appendChild(elementfile);
+    
+        elementRecent = doc.createElement('recent');
+        elementFiles.appendChild(elementRecent);
+    
+    
+        elementLibrary = doc.createElement('library');
+        elementFiles.appendChild(elementLibrary);
+    
+        username = ''
+        id = ''
+        elementUser = doc.createElement('user')
+        elementUser.setAttribute('name', username)
+        elementUser.setAttribute('id', id)
+        doc.documentElement.appendChild(elementUser)
+        
+        return doc
+
+def create_ldt(project, user):
+    
+    contentList=project.contents.all()
+    
+    """create xml"""
+    
+    # create a dom
+    impl = xml.dom.getDOMImplementation()
+    dom = impl.createDocument(xml.dom.EMPTY_NAMESPACE, 'iri', None)
+    #node project
+    elementProject = dom.createElement('project')
+    dom.documentElement.appendChild(elementProject)
+    
+    
+    elementProject.setAttribute('abstract', "")
+    elementProject.setAttribute('title', project.title)
+    elementProject.setAttribute('user', user.username)
+    elementProject.setAttribute('id', project.ldt_id)
+    #node medias
+    elementMedias = dom.createElement('medias')
+    dom.documentElement.appendChild(elementMedias)
+    
+    idsel = None      
+    for content in contentList:
+        if not idsel:
+            idsel = content.iri_id
+        elementMedia = dom.createElement('media')            
+        elementMedia.setAttribute('id', content.iri_id)
+        elementMedia.setAttribute('src', content.iri_url())
+        if content.videopath and content.videopath !="":
+            elementMedia.setAttribute('video', content.videopath)
+        else:
+            elementMedia.setAttribute('video', settings.STREAM_URL)
+        elementMedia.setAttribute('pict', "")
+        elementMedia.setAttribute('extra', "")
+        elementMedias.appendChild(elementMedia)
+    if not idsel:
+        idsel = ""
+
+    #node annotations
+    elementAnnotations = dom.createElement('annotations')
+    dom.documentElement.appendChild(elementAnnotations)
+    #node displays
+    elementDisplays = dom.createElement('displays')
+    elementDisplay = dom.createElement('display')
+    elementDisplay.setAttribute('id', '0')
+    elementDisplay.setAttribute('title', 'Init view')
+    elementDisplay.setAttribute('idsel', idsel)
+    elementDisplay.setAttribute('tc', '0')
+    elementDisplay.setAttribute('zoom', '0')
+    elementDisplay.setAttribute('scroll', '0')
+    elementDisplay.setAttribute('infoBAB', '')
+    #node content
+    for content in contentList:
+        elementContent = dom.createElement('content')
+        elementContent.setAttribute('id', content.iri_id)
+        if not 'http' in content.iriurl:
+        #eg: "iiiielizabethrosse/ENMI08-III_elizabethrosse.iri"
+            url = content.iri_url()
+        else:
+            url =content.iriurl
+        file = urllib.urlopen(url)
+        doc = xml.dom.minidom.parse(file)
+        con = xml.xpath.Context.Context(doc, 1, 1, None)
+        res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble/decoupage", context=con)
+        #node decoupage
+        for decoupagenode in res:
+            decoupage_id = decoupagenode.getAttribute(u"id")
+            ensemble_id = decoupagenode.parentNode.getAttribute(u"id")
+            elementDecoupage = dom.createElement('decoupage')
+            elementDecoupage.setAttribute('idens', ensemble_id)
+            elementDecoupage.setAttribute('id', decoupage_id)
+            elementContent.appendChild(elementDecoupage)     
+        elementDisplay.appendChild(elementContent)   
+    
+    elementDisplays.appendChild(elementDisplay)
+    dom.documentElement.appendChild(elementDisplays)
+    
+    elementEdits = dom.createElement('edits')
+    dom.documentElement.appendChild(elementEdits)
+    # write dom in Project.ldt 
+    project.ldt = dom.documentElement.toprettyxml()
+    #save Project
+    project.save()
+    return project        
+
+
+def copy_ldt(project, new_project, user):
+    new_project.ldt_id = str(uuid.uuid1())
+    new_project.created_by=user.username
+    new_project.changed_by=user.username
+    new_project.state = 1
+    
+    contentList=project.contents.all()
+    
+    """create xml"""
+    
+    # create a dom
+    dom = xml.dom.minidom.parseString(project.ldt.encode("utf-8"))
+    con = xml.xpath.Context.Context(dom, 1, 1, None)
+    res = xml.xpath.Evaluate("iri/project", context=con)
+    for elementProject in res:
+        elementProject.setAttribute('abstract', "")
+        elementProject.setAttribute('title', new_project.title)
+        elementProject.setAttribute('user', user.username)
+        elementProject.setAttribute('id', new_project.ldt_id)
+        
+    new_project.ldt = dom.documentElement.toprettyxml()
+    #save Project
+    new_project.save()
+    return new_project
+
+def create_empty_iri(file, content, username):
+    
+    writer = MarkupWriter(file, indent = u"yes")
+    writer.startDocument()
+    writer.startElement(u"iri")
+    
+    writer.startElement(u"head")
+    
+    writer.simpleElement(u'meta', attributes={u'name':u'id', 'content':unicode(content.iri_id)})
+    writer.simpleElement(u'meta', attributes={u'name':u'title', 'content':unicode(content.title)})
+    writer.simpleElement(u'meta', attributes={u'name':u'abstract', 'content':unicode(content.description)})
+    writer.simpleElement(u'meta', attributes={u'name':u'author', 'content':unicode(username)})
+    writer.simpleElement(u'meta', attributes={u'name':u'contributor', 'content':unicode(username)})
+    writer.simpleElement(u'meta', attributes={u'name':u'date', 'content':unicode(datetime.date.today().isoformat())})
+    writer.simpleElement(u'meta', attributes={u'name':u'copyright', 'content':u'IRI'})
+    writer.simpleElement(u'meta', attributes={u'name':u'type', 'content':u'video'})    
+    
+    writer.endElement(u"head")
+
+    writer.startElement(u"body")
+    
+    writer.startElement(u"ensembles")
+    writer.endElement(u"ensembles")
+    
+    writer.simpleElement(u'links')
+    writer.startElement(u"medias")
+
+    writer.startElement(u"media", attributes={u'id':u'video'})
+    writer.simpleElement(u'video', attributes={u'src':unicode(content.src),u'id':unicode(content.iri_id),u'dur':unicode(content.duration),u'begin':u'0'})
+    writer.endElement(u"media")
+
+    writer.startElement(u"media", attributes={u'id':u'tool'})
+    writer.simpleElement(u'tool')
+    writer.endElement(u"media")
+
+    writer.endElement(u"medias")
+    
+    #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""})
+    writer.simpleElement(u'display')
+    
+    writer.endElement(u"body")
+
+    
+    writer.endElement(u"iri")
+    writer.endDocument()
+    
+def update_iri(filepath, content, username):
+    
+    # open xml
+    doc = xml.dom.minidom.parse(filepath)
+    doc = Ft.Xml.Domlette.ConvertDocument(doc) 
+    
+    con = xml.xpath.Context.Context(doc, 1, 1, None)
+    res = xml.xpath.Evaluate("/iri/heqd/meta", context=con)
+    # update meta
+    
+    for meta_node in res:
+        meta_name = meta_node.getAttributeNS(None,"name")
+        content_attr = None
+        if meta_name == u'id':
+            content_attr = unicode(content.iri_id)
+        elif meta_name == u'title':
+            content_attr = unicode(content.title)
+        elif meta_name == u'abstract':
+            content_attr = unicode(content.description)
+        elif meta_name == u'contributor':
+            content_attr = unicode(username)
+        elif meta_name == u"date":
+            content_attr = unicode(datetime.date.today().isoformat())
+        if content_attr is not None:
+            meta_node.setAttributeNS(None, u"content", content_attr)
+
+    res = xml.xpath.Evaluate("/iri/body/medias/media[@id='video']/video", context=con)
+    
+    if len(res) > 0:
+        video_node = res[0]
+        video_node.setAttributeNS(None, u'src', unicode(content.src))
+        video_node.setAttributeNS(None, u'dur', unicode(content.duration))
+        video_node.setAttributeNS(None, u'id', unicode(content.iri_id))
+    # update video
+    
+    f = open(filepath, "w")
+    try:
+        xml.dom.ext.Print(doc, stream=f)
+    finally:
+        f.close()