diff -r 674a65969a14 -r 1e7732f40eee web/ldt/ldt_utils/views.py --- a/web/ldt/ldt_utils/views.py Thu Sep 23 18:39:40 2010 +0200 +++ b/web/ldt/ldt_utils/views.py Tue Sep 28 18:24:14 2010 +0200 @@ -16,19 +16,15 @@ from contentindexer import * from projectserializer import * from string import Template -from Ft.Xml import MarkupWriter import cgi import uuid import base64 import lucene -import xml.dom -import xml.dom.ext -import xml.dom.minidom import tempfile import urllib2 from urllib2 import urlparse from jogging import logging - +import lxml.etree def searchForm(request): @@ -65,7 +61,7 @@ doc = ldtgen.generateInit([field,query], 'ldt.ldt_utils.views.searchLdt', 'ldt.ldt_utils.views.searchSegments') resp = HttpResponse(mimetype="text/xml;charset=utf-8") - xml.dom.ext.PrettyPrint(doc, resp) + doc.write(resp, pretty_print=True) return resp def searchLdt(request, field, query, edition=None): @@ -112,21 +108,25 @@ if edition is not None: iri_ids = map(lambda t:t[0], filter(lambda id: id[0] is not None, Speak.objects.filter(session__day__edition=edition).order_by("session__start_ts", "order").values_list("content__iri_id"))) - doc = xml.dom.getDOMImplementation().createDocument(None, "iri", None) + iri = lxml.etree.Element('iri') + doc = lxml.etree.ElementTree(iri) for resultMap in res: if iri_ids is None or resultMap['iri_id'] in iri_ids: - elem = doc.createElement('seg') - elem.setAttribute('idctt', resultMap['iri_id']) - elem.setAttribute('idens', resultMap['ensemble_id']) - elem.setAttribute('iddec', resultMap['decoupage_id']) - elem.setAttribute('idseg', resultMap['element_id']) - elem.setAttribute('idvue', "") - elem.setAttribute('crit', "") - doc.documentElement.appendChild(elem) + seg = etree.SubElement(iri, 'seg') + seg.set('idctt', resultMap['iri_id']) + seg.set('idens', resultMap['ensemble_id']) + seg.set('iddec', resultMap['decoupage_id']) + seg.set('idseg', resultMap['element_id']) + seg.set('idvue', "") + seg.set('crit', "") - return HttpResponse(doc.toprettyxml(encoding='utf-8'), mimetype="text/xml;charset=utf-8") - + return doc + + return HttpResponse(lxml.etree.tostring(doc, pretty_print=True), mimetype="text/xml;charset=utf-8") + + + @login_required def list_ldt(request): contents = Content.objects.all() @@ -187,7 +187,7 @@ resp = HttpResponse(mimetype="text/xml") resp['Cache-Control']='no-cache, must-revalidate' resp['Pragma']='no-cache' - xml.dom.ext.PrettyPrint(doc, resp) + doc.write(resp, pretty_print=True) return resp def ldtProject(request, id): @@ -262,32 +262,46 @@ ldt = request.POST['ldt'] id = request.POST['id'] ldtproject=Project.objects.get(ldt_id=id) - #save xml ldt + + #save xml ldt ldtproject.ldt=ldt - #get new title - dom = xml.dom.minidom.parseString(ldt.encode( "utf-8" )) - con = xml.xpath.Context.Context(dom, 1, 1, None) - result = xml.xpath.Evaluate("/iri/project",context=con) - for pnode in result: - title=pnode.getAttribute("title") + + ldtproj = get_attrib(ldtproject) + ldtproj.save() + + else: + ldt = '' + + return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':title, 'contents': new_contents}, context_instance=RequestContext(request)) + + +def get_attrib(ldtproject): + doc = lxml.etree.fromstring(ldtproject.ldt.encode( "utf-8" )) + result = doc.xpath("/iri/project") + + for pnode in result: + title = pnode.get("title") break - #set new title + + #set new title ldtproject.title=title - #get new content list + + #get new content list new_contents=[] - result = xml.xpath.Evaluate("/iri/medias/media", context=con) + result = doc.xpath("/iri/medias/media") for medianode in result: - id = medianode.attributes['id'].value + id = medianode.get("id") new_contents.append(id) - # set new content list + + #set new content list for c in ldtproject.contents.all(): if not c.iri_id in new_contents: - ldtproject.contents.remove(c) - ldtproject.save() - else: - ldt = '' - return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':title, 'contents': new_contents}, context_instance=RequestContext(request)) - + ldtproject.contents.remove(c) + + return ldtproject + + + @login_required def publish(request, id, redirect=True): ldt = get_object_or_404(Project, ldt_id=id) @@ -321,8 +335,8 @@ def ldt(request, url, startSegment = None): - import Ft - from Ft.Xml import MarkupWriter + ##import Ft + ##from Ft.Xml import MarkupWriter ## ? resp = HttpResponse(mimetype="text/xml; charset=utf-8") resp['Cache-Control'] = 'no-cache' @@ -515,4 +529,4 @@ return render_to_response('ldt/ldt_utils/create_content.html', {'content_form': content_form, 'media_form': media_form,'form_status': form_status,'create_content_action': create_content_action}, context_instance=RequestContext(request)) - \ No newline at end of file +