Annotation of ECHO_content/ECHO_xslt.py, revision 1.2
1.1 dwinter 1: ### XSLT Class ###
2: ### setzt 4 suite vorraus ###
3:
4: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
5: from Globals import DTMLFile
6: from ECHO_Nav import ECHO_pageTemplate
1.2 ! dwinter 7: from threading import Thread,Timer
1.1 dwinter 8:
9: from Globals import package_home
10:
11: import os.path
12:
13: import urllib
14:
15: try:
16: from Ft.Xml.Xslt.Processor import Processor
17: from Ft.Xml import InputSource
18:
19: except:
20: print "4suite has to be installed"
21:
22:
1.2 ! dwinter 23: class getXML:
! 24: """get XML thread"""
! 25:
! 26: def __init__(self,qs,xsl):
! 27:
! 28: self.qs=qs
! 29: self.xsl=xsl
! 30: self.result=None
! 31:
! 32: def __call__(self):
! 33:
! 34: urlH=urllib.urlopen(self.qs)
! 35: xml=urlH.read()
! 36: urlH.close()
! 37:
! 38:
! 39: xsltproc=Processor()
! 40: document = InputSource.DefaultFactory.fromString(xml)
! 41: stylesheet = InputSource.DefaultFactory.fromUri(self.xsl)
! 42: xsltproc.appendStylesheet(stylesheet)
! 43:
! 44: self.result=xsltproc.run(document)
! 45:
! 46:
! 47: def getResult(self):
! 48: return self.result
! 49:
! 50:
! 51:
! 52:
1.1 dwinter 53: class ECHO_xslt(ECHO_pageTemplate):
54: """ECHO_xslt classe"""
55:
56: meta_type="ECHO_xslt"
1.2 ! dwinter 57: def refreshTxt(self):
! 58: """txt fuer refresh"""
! 59: return """ 2;url=%s?repeat=%s """%(self.absolute_url(),self.threadName)
1.1 dwinter 60:
61: def xslt(self):
1.2 ! dwinter 62: """xslt"""
! 63: return self.pt_render()
1.1 dwinter 64:
65:
66:
1.2 ! dwinter 67:
! 68: def index_html(self,repeat=None):
! 69: """standard ausgabe"""
! 70: threadName=repeat
! 71:
1.1 dwinter 72:
1.2 ! dwinter 73: if not threadName or threadName=="":
! 74: self.cgiUrl="http://medea.mpiwg-berlin.mpg.de/cgi-bin/search/q1"
1.1 dwinter 75:
1.2 ! dwinter 76: qs="%s?%s"%(self.cgiUrl,self.REQUEST['QUERY_STRING'])
! 77: xsl=self.absolute_url()+"/xslt"
! 78: self.xmltrans=getXML(qs,xsl)
! 79: thread=Thread(target=self.xmltrans)
! 80:
! 81: thread.start()
! 82:
! 83: self.threadName=thread.getName()[0:]
! 84: wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template'])
! 85: if wait_template:
! 86: return wait_template[0][1]()
! 87: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','xsltWait.zpt')).__of__(self)
! 88: return pt()
! 89: #xmltrans.run()
! 90:
! 91: else:
! 92:
! 93: if (self.xmltrans.getResult()==None):
! 94: killThread(self.xmltrans)
! 95:
! 96: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','xsltWait.zpt')).__of__(self)
! 97: return pt()
! 98: else:
! 99: return self.xmltrans.getResult()
! 100:
! 101:
! 102: def killThread(thread):
! 103: print "killing"
! 104: del thread
! 105:
1.1 dwinter 106: def manage_addECHO_xsltForm(self):
107: """Form for adding"""
108: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_xslt.zpt')).__of__(self)
109: return pt()
110:
111: from urllib import quote
112:
113:
114: def manage_addECHO_xslt(self, id, label, weight= 0,contentType=0,title=None, text=None,
115: REQUEST=None, submit=None):
116: "Add a Page Template with optional file content."
117:
118:
119: id = str(id)
120: if REQUEST is None:
121: self._setObject(id, ECHO_xslt(id, text))
122: ob = getattr(self, id)
123: setattr(ob,'weight',weight)
124: setattr(ob,'label',label)
125: setattr(ob,'contentType',contentType)
126: if title:
127: ob.pt_setTitle(title)
128: return ob
129: else:
130: file = REQUEST.form.get('file')
131: headers = getattr(file, 'headers', None)
132: if headers is None or not file.filename:
133: zpt = ECHO_xslt(id)
134: else:
135: zpt = ECHO_xslt(id, file, headers.get('contentType'))
136:
137: self._setObject(id, zpt)
138: ob = getattr(self, id)
139: setattr(ob,'weight',weight)
140: setattr(ob,'label',label)
141: if title:
142: ob.pt_setTitle(title)
143:
144: try:
145: u = self.DestinationURL()
146: except AttributeError:
147: u = REQUEST['URL1']
148:
149: if submit == " Add and Edit ":
150: u = "%s/%s" % (u, quote(id))
151: REQUEST.RESPONSE.redirect(u+'/manage_main')
152: return ''
153:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>