### 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 ''
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>