migrate to lxml + new version V00.14
authorymh <ymh.work@gmail.com>
Mon, 13 Sep 2010 12:56:17 +0200
changeset 49 55f91a1f9df8
parent 48 7b78d3911aa1
child 50 06d158b5d24b
migrate to lxml + new version
web/franceculture/__init__.py
web/franceculture/templates/franceculture/partial/projectslist.html
web/franceculture/templates/franceculture/workspace.html
web/franceculture/templates/ldt/ldt_utils/content_list.html
web/franceculture/templates/ldt/ldt_utils/ldt_list.html
web/ldt/ldt_utils/projectserializer.py
web/static/js/projectscontents.js
--- a/web/franceculture/__init__.py	Mon Sep 13 10:33:05 2010 +0200
+++ b/web/franceculture/__init__.py	Mon Sep 13 12:56:17 2010 +0200
@@ -1,4 +1,4 @@
-VERSION = (0,13)
+VERSION = (0,14)
 
 VERSION_STR = unicode(".".join(map(lambda i:"%02d" % (i,), VERSION)))
 
--- a/web/franceculture/templates/franceculture/partial/projectslist.html	Mon Sep 13 10:33:05 2010 +0200
+++ b/web/franceculture/templates/franceculture/partial/projectslist.html	Mon Sep 13 12:56:17 2010 +0200
@@ -19,7 +19,7 @@
         </td>
         <td class="cellimg"><div class="cellimgdiv"><img src="{{MEDIA_URL}}/img/document_edit.gif" href="{% url ldt.ldt_utils.views.indexProject project.ldt_id %}" class="ldt_link" alt="{% trans 'open ldt' %}" title="{% trans 'open ldt' %}"/></div></td>
         <td class="cellimg"><div class="cellimgdiv"><img src="{{MEDIA_URL}}/img/documents_duplicate.gif" href="{% url ldt.ldt_utils.views.copy_project project.ldt_id %}" class="ldt_link_create" alt="{% trans 'copy project' %}" title="{% trans 'copy project' %}"/></div></td>
-        <td class="cellimg"><div class="cellimgdiv"><img src="{{MEDIA_URL}}/img/plugin.gif" href="{% url ldt.ldt_utils.views.copy_project project.ldt_id %}" id="player_project_{{project.ldt_id}}" class="ldt_link_embed" alt="{% trans 'link json by id' %}" title="{% trans 'link json by id' %}"/></div></td>
+        <td class="cellimg"><div class="cellimgdiv"><img src="{{MEDIA_URL}}/img/plugin.gif" href="{{WEB_URL}}{{json_url_id}}" id="player_project_{{project.ldt_id}}" class="ldt_link_embed" alt="{% trans 'link json by id' %}" title="{% trans 'link json by id' %}"/></div></td>
         <td class="projecttitle">{{ project.title }}</td>
     </tr>
 {% endfor %}
--- a/web/franceculture/templates/franceculture/workspace.html	Mon Sep 13 10:33:05 2010 +0200
+++ b/web/franceculture/templates/franceculture/workspace.html	Mon Sep 13 12:56:17 2010 +0200
@@ -16,7 +16,7 @@
 
 function init_events(base_node) {
 
-	init_events_contents(base_node);
+	init_events_contents(base_node, "{% url franceculture.views.popup_embed %}");
 			
 }
 
--- a/web/franceculture/templates/ldt/ldt_utils/content_list.html	Mon Sep 13 10:33:05 2010 +0200
+++ b/web/franceculture/templates/ldt/ldt_utils/content_list.html	Mon Sep 13 12:56:17 2010 +0200
@@ -14,7 +14,7 @@
 
 function init_events(base_node) {
 
-	init_events_contents(base_node);		
+	init_events_contents(base_node, "{% url franceculture.views.popup_embed %}");		
 }
 
 $(document).ready(function(){
--- a/web/franceculture/templates/ldt/ldt_utils/ldt_list.html	Mon Sep 13 10:33:05 2010 +0200
+++ b/web/franceculture/templates/ldt/ldt_utils/ldt_list.html	Mon Sep 13 12:56:17 2010 +0200
@@ -17,7 +17,7 @@
 
 function init_events(base_node) {
 
-	init_events_base(base_node);
+	init_events_base(base_node, "{% url franceculture.views.popup_embed %}");
 
 	$('.publishedproject', base_node).click(function(e) {
 		e.preventDefault();
--- a/web/ldt/ldt_utils/projectserializer.py	Mon Sep 13 10:33:05 2010 +0200
+++ b/web/ldt/ldt_utils/projectserializer.py	Mon Sep 13 12:56:17 2010 +0200
@@ -1,6 +1,4 @@
-import xml.dom
-import Ft.Xml.Domlette
-import xml.xpath
+import lxml.etree
 import uuid
 from datetime import datetime
 from ldt.ldt_utils.models import Content, Project
@@ -25,10 +23,10 @@
     
     def __parse_ensemble(self, ensemble_node, content):
         
-        ensemble_id = ensemble_node.getAttributeNS(None,u"id")
-        ensemble_author = ensemble_node.getAttributeNS(None,u"author")
-        ensemble_title = ensemble_node.getAttributeNS(None,u"title")
-        ensemble_description = ensemble_node.getAttributeNS(None,u"abstract")
+        ensemble_id = ensemble_node.attrib[u"id"]
+        ensemble_author = ensemble_node.attrib[u"author"]
+        ensemble_title = ensemble_node.attrib[u"title"]
+        ensemble_description = ensemble_node.attrib[u"abstract"]
         ensemble_created = datetime.utcnow().isoformat()
         ensemble_modified = ensemble_created 
         
@@ -49,16 +47,16 @@
         }
         
         
-        for decoupage_node in ensemble_node.childNodes:
-            if decoupage_node.nodeType != xml.dom.Node.ELEMENT_NODE or decoupage_node.tagName != "decoupage" :
+        for decoupage_node in ensemble_node:
+            if decoupage_node.tag != "decoupage" :
                 continue
             
-            decoupage_id = decoupage_node.getAttributeNS(None, u"id")
-            decoupage_creator = decoupage_node.getAttributeNS(None,u"author")
+            decoupage_id = decoupage_node.attrib[ u"id"]
+            decoupage_creator = decoupage_node.attrib[u"author"]
             if not decoupage_creator:
                 decoupage_creator = "IRI"
             decoupage_contributor = decoupage_creator
-            date_str = decoupage_node.getAttributeNS(None,u"date")
+            date_str = decoupage_node.get(u"date")
             decoupage_created = None
             if date_str :
                 for date_format in DATE_FORMATS:
@@ -72,12 +70,12 @@
             decoupage_modified = decoupage_created
             
             decoupage_title = ""
-            for txtRes in xml.xpath.Evaluate("title/text()", decoupage_node): 
-                    decoupage_title += txtRes.data
+            for txtRes in decoupage_node.xpath("title/text()", smart_strings=False): 
+                    decoupage_title += txtRes
 
             decoupage_description = ""
-            for txtRes in xml.xpath.Evaluate("abstract/text()", decoupage_node): 
-                    decoupage_description += txtRes.data
+            for txtRes in decoupage_node.xpath("abstract/text()", smart_strings=False): 
+                    decoupage_description += txtRes
             
 
             
@@ -95,53 +93,48 @@
             
             self.annotation_types.append(new_annotation_types)            
                         
-            res = xml.xpath.Evaluate("elements/element", decoupage_node)
+            res = decoupage_node.xpath("elements/element")
             for element_node in res:
                 
-                element_id = element_node.getAttributeNS(None,u"id")
-                element_begin = element_node.getAttributeNS(None,u"begin")
-                element_duration = element_node.getAttributeNS(None,u"dur")
+                element_id = element_node.attrib[u"id"]
+                element_begin = element_node.attrib[u"begin"]
+                element_duration = element_node.attrib[u"dur"]
                 element_media = content.iri_id
-                element_color = element_node.getAttributeNS(None,u"color")
+                element_color = element_node.attrib[u"color"]
                 
                 element_title = ""
-                for txtRes in xml.xpath.Evaluate("title/text()", element_node): 
-                    element_title += txtRes.data 
+                for txtRes in element_node.xpath("title/text()", smart_strings=False): 
+                    element_title += txtRes
         
                 element_description = ""
-                for txtRes in xml.xpath.Evaluate("abstract/text()", element_node): 
-                    element_description += txtRes.data 
+                for txtRes in element_node.xpath("abstract/text()", smart_strings=False): 
+                    element_description += txtRes
                 
                 element_audio_src = ""
                 element_audio_href = ""
-                res = xml.xpath.Evaluate("audio", element_node)
+                res = element_node.xpath("audio")
                 if len(res) > 0:
-                    element_audio_src = res[0].getAttributeNS(None, u"source")
-                    ltext = []
-                    for n in res[0].childNodes:
-                        if n.nodeType in (dom.Node.TEXT_NODE, dom.Node.CDATA_SECTION_NODE):
-                            ltext.append(n.data)
-                    element_audio_href = ''.join(ltext)
-                
+                    element_audio_src = res[0].get(u"source",u"")
+                    element_audio_href =  res[0].text                
                 
                 element_tags = []
                 
-                tags = element_node.getAttributeNS(None,u"tags")
+                tags = element_node.get(u"tags",u"")
                 
                 tags_list = map(lambda s:s.strip(),tags.split(","))
 
                 #tags                                
                 if tags is None or len(tags) == 0:
                     tags_list = []
-                    restagnode = xml.xpath.Evaluate("tag/text()", element_node)
+                    restagnode = element_node.xpath("tag/text()", smart_strings=False)
                     for tagnode in restagnode:
-                        tags_list.append(tagnode.data)
+                        tags_list.append(tagnode)
                         
                 if tags_list is None or len(tags_list) == 0:
                     tags_list = []
-                    restagnode = xml.xpath.Evaluate("tags/tag/text()", element_node)
+                    restagnode = element_node.xpath("tags/tag/text()", smart_strings=False)
                     for tagnode in restagnode:
-                        tags_list.append(tagnode.data)
+                        tags_list.append(tagnode)
                 
                 tag_date = datetime.utcnow().isoformat()
                 for tag_title in tags_list:
@@ -198,36 +191,28 @@
 
     def __parse_ldt(self):
         
-        doc = xml.dom.minidom.parseString(self.project.ldt.encode("utf-8"))
-        self.ldt_doc = Ft.Xml.Domlette.ConvertDocument(doc)
-        con = xml.xpath.Context.Context(doc, 1, 1, None)
+        self.ldt_doc = lxml.etree.fromstring(self.project.ldt.encode("utf-8"))
         
-        res = xml.xpath.Evaluate("/iri/medias/media", context=con)
+        res = self.ldt_doc.xpath("/iri/medias/media")
         for mediaNode in res:
-            iri_id = mediaNode.getAttributeNS(None,u"id")
+            iri_id = mediaNode.attrib[u"id"]
             content = Content.objects.get(iri_id=iri_id)
             self.__parse_content(content)
             
-        res = xml.xpath.Evaluate("/iri/annotations/content",context=con)               
+        res = self.ldt_doc.xpath("/iri/annotations/content")               
         
         for content_node in res:
-            content_id = content_node.getAttributeNS(None, u"id")
+            content_id = content_node.attrib[u"id"]
             content = Content.objects.get(iri_id=content_id)
-            for ensemble_node in content_node.childNodes:
-                if ensemble_node.nodeType != xml.dom.Node.ELEMENT_NODE or ensemble_node.tagName != "ensemble" :
+            for ensemble_node in content_node:
+                if ensemble_node.tag != "ensemble" :
                     continue
-                self.__parse_ensemble(ensemble_node, content)
-            
-        #res = xml.xpath.Evaluate("/iri/displays/display",context=con)
-        
-        #for display_node in res:
-            
+                self.__parse_ensemble(ensemble_node, content)            
     
     
     def __parse_content(self, content):
         
-        doc = Ft.Xml.Domlette.ConvertDocument(xml.dom.minidom.parse(content.iri_file_path()))
-        con = xml.xpath.Context.Context(doc, 1, 1, None)
+        doc = lxml.etree.parse(content.iri_file_path())
         
         authors = content.authors.all()
         
@@ -243,16 +228,16 @@
         
         content_author = ""
         
-        res = xml.xpath.Evaluate("/iri/head/meta[@name='author']/@content", context=con)
+        res = doc.xpath("/iri/head/meta[@name='author']/@content")
         if len(res) > 0:
-            content_author = res[0].value
+            content_author = res[0]
         
         
         content_date = ""
         
-        res = xml.xpath.Evaluate("/iri/head/meta[@name='date']/@content", context=con)
+        res = doc.xpath("/iri/head/meta[@name='date']/@content")
         if len(res) > 0:
-            content_date = res[0].value
+            content_date = res[0]
 
         
         new_media = {
@@ -281,7 +266,7 @@
         self.medias.append(new_media)
         
         
-        res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble",context=con)
+        res = doc.xpath("/iri/body/ensembles/ensemble")
         
         for ensemble_node in res:
             self.__parse_ensemble(ensemble_node, content)
--- a/web/static/js/projectscontents.js	Mon Sep 13 10:33:05 2010 +0200
+++ b/web/static/js/projectscontents.js	Mon Sep 13 12:56:17 2010 +0200
@@ -13,7 +13,7 @@
 	}
 };
 
-function init_events_base(base_node) {
+function init_events_base(base_node, embed_url) {
 
 	$('.ldt_link',base_node).nyroModal({
        	type: 'iframe',
@@ -79,7 +79,7 @@
                width:650,
                bgColor: 'rgb(239, 239, 239)',
                padding: 5,
-		       url: '{% url franceculture.views.popup_embed %}?json_url='+escape(json_url)+'&player_id='+escape(player_id),
+		       url: embed_url+'?json_url='+escape(json_url)+'&player_id='+escape(player_id),
 		   });
 		   return false;
 	});
@@ -136,9 +136,9 @@
 };
 
 
-function init_events_contents(base_node) {
+function init_events_contents(base_node, embed_url) {
 
-	init_events_base(base_node);
+	init_events_base(base_node, embed_url);
 	
 	$('.content_link_create').nyroModal({
 	    type: 'iframe',