--- 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)