### XSLT Class ### ### setzt 4 suite vorraus ### from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Globals import DTMLFile from ECHO_Nav import ECHO_pageTemplate from threading import Thread,Timer from Globals import package_home import os.path import urllib try: from Ft.Xml.Xslt.Processor import Processor from Ft.Xml import InputSource except: print "4suite has to be installed" class getXML: """get XML thread""" def __init__(self,qs,xsl): self.qs=qs self.xsl=xsl self.result=None def __call__(self): urlH=urllib.urlopen(self.qs) xml=urlH.read() urlH.close() xsltproc=Processor() document = InputSource.DefaultFactory.fromString(xml) stylesheet = InputSource.DefaultFactory.fromUri(self.xsl) xsltproc.appendStylesheet(stylesheet) self.result=xsltproc.run(document) def getResult(self): return self.result class ECHO_xslt(ECHO_pageTemplate): """ECHO_xslt classe""" meta_type="ECHO_xslt" def refreshTxt(self): """txt fuer refresh""" return """ 2;url=%s?repeat=%s """%(self.absolute_url(),self.threadName) def xslt(self): """xslt""" return self.pt_render() def index_html(self,repeat=None): """standard ausgabe""" threadName=repeat if not threadName or threadName=="": self.cgiUrl="http://medea.mpiwg-berlin.mpg.de/cgi-bin/search/q1" qs="%s?%s"%(self.cgiUrl,self.REQUEST['QUERY_STRING']) xsl=self.absolute_url()+"/xslt" self.xmltrans=getXML(qs,xsl) thread=Thread(target=self.xmltrans) thread.start() self.threadName=thread.getName()[0:] wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template']) if wait_template: return wait_template[0][1]() pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','xsltWait.zpt')).__of__(self) return pt() #xmltrans.run() else: if (self.xmltrans.getResult()==None): killThread(self.xmltrans) pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','xsltWait.zpt')).__of__(self) return pt() else: return self.xmltrans.getResult() def killThread(thread): print "killing" del thread def manage_addECHO_xsltForm(self): """Form for adding""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_xslt.zpt')).__of__(self) return pt() from urllib import quote def manage_addECHO_xslt(self, id, label, weight= 0,contentType=0,title=None, text=None, REQUEST=None, submit=None): "Add a Page Template with optional file content." id = str(id) if REQUEST is None: self._setObject(id, ECHO_xslt(id, text)) ob = getattr(self, id) setattr(ob,'weight',weight) setattr(ob,'label',label) setattr(ob,'contentType',contentType) if title: ob.pt_setTitle(title) return ob else: file = REQUEST.form.get('file') headers = getattr(file, 'headers', None) if headers is None or not file.filename: zpt = ECHO_xslt(id) else: zpt = ECHO_xslt(id, file, headers.get('contentType')) self._setObject(id, zpt) ob = getattr(self, id) setattr(ob,'weight',weight) setattr(ob,'label',label) if title: ob.pt_setTitle(title) try: u = self.DestinationURL() except AttributeError: u = REQUEST['URL1'] if submit == " Add and Edit ": u = "%s/%s" % (u, quote(id)) REQUEST.RESPONSE.redirect(u+'/manage_main') return ''