diff -r 7b78d3911aa1 -r 55f91a1f9df8 web/ldt/ldt_utils/projectserializer.py --- 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)