Annotation of ECHO_content/ECHO_xslt.py, revision 1.4
1.1 dwinter 1: ### XSLT Class ###
2: ### setzt 4 suite vorraus ###
1.4 ! dwinter 3: from Acquisition import Implicit
1.1 dwinter 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.4 ! dwinter 8: import threading
! 9: from ECHO_helpers import *
! 10: import sys
! 11: import urllib
! 12: import urlparse
! 13:
! 14:
1.1 dwinter 15:
16: from Globals import package_home
17:
1.4 ! dwinter 18:
1.1 dwinter 19: import os.path
20:
21: import urllib
22:
23: try:
24: from Ft.Xml.Xslt.Processor import Processor
25: from Ft.Xml import InputSource
26:
27: except:
28: print "4suite has to be installed"
29:
30:
1.4 ! dwinter 31: class getXML(Implicit):
1.2 dwinter 32: """get XML thread"""
33:
1.4 ! dwinter 34: def set(self,qs,xsl,result):
! 35: """set"""
! 36:
! 37: self._v_qs=qs
1.2 dwinter 38: self.xsl=xsl
1.4 ! dwinter 39: self.result=None
1.2 dwinter 40:
1.4 ! dwinter 41: # def acquireLock(self):
! 42: #
! 43: # lock=getattr(self, "_v_lock", None)
! 44: # if not lock:
! 45: # self._v_lock=threading.Lock()
! 46: # lock=self._v_lock
! 47: # lock.acquire()
! 48: #
! 49: # def releaseLock(self):
! 50: # # acquire() should have been called
! 51: # # about one second before. This means the volatile lock
! 52: # # should still be there
! 53: #
! 54: # self._v_lock.release()
! 55: #
! 56:
1.2 dwinter 57: def __call__(self):
1.4 ! dwinter 58: """wait"""
! 59: return True
! 60:
! 61: def run(self):
! 62: """call it"""
! 63: xml=""
! 64:
1.3 dwinter 65: try:
1.4 ! dwinter 66:
! 67: urlH=urllib.urlopen(self._v_qs)
! 68: xml=urlH.read()
! 69: urlH.close()
! 70: xsltproc=Processor()
! 71: document = InputSource.DefaultFactory.fromString(xml)
! 72:
! 73: stylesheet = InputSource.DefaultFactory.fromUri(self.xsl)
! 74:
! 75: xsltproc.appendStylesheet(stylesheet)
! 76:
! 77:
! 78: #print self.xsl
! 79: #print xsltproc.run(document)
! 80: tmp=xsltproc.run(document)
! 81:
! 82: self.result=tmp[0:]
! 83:
1.3 dwinter 84:
85: except:
1.4 ! dwinter 86:
! 87: self.result="<html>error: %s %s<br>"%sys.exc_info()[0:2]
! 88: self.result+=xml
! 89: self.result+="</html>"
1.2 dwinter 90:
1.4 ! dwinter 91:
! 92:
1.2 dwinter 93: def getResult(self):
1.4 ! dwinter 94:
1.2 dwinter 95: return self.result
96:
97:
98:
1.1 dwinter 99: class ECHO_xslt(ECHO_pageTemplate):
100: """ECHO_xslt classe"""
101:
102: meta_type="ECHO_xslt"
1.4 ! dwinter 103:
! 104: results={}
! 105: manage_options=ECHO_pageTemplate.manage_options+(
! 106: {'label':'Change xml-ressource','action':'change_ECHO_xsltForm'},)
! 107:
1.2 dwinter 108: def refreshTxt(self):
109: """txt fuer refresh"""
110: return """ 2;url=%s?repeat=%s """%(self.absolute_url(),self.threadName)
1.1 dwinter 111:
112: def xslt(self):
1.2 dwinter 113: """xslt"""
1.1 dwinter 114:
1.4 ! dwinter 115: return self.document_src()
1.1 dwinter 116:
1.4 ! dwinter 117: def change_ECHO_xsltForm(self):
! 118: """change form"""
! 119: pt=zptFile(self, 'zpt/ChangeECHO_xsltForm.zpt')
! 120: return pt()
! 121:
! 122: def addChanges(self,cgiUrl,RESPONSE=None):
! 123: """change the xslt, ueberschriebt addChanges in ECHO_PageTemplate"""
! 124: if urlparse.urlparse(cgiUrl)[0]=="":#relative url in absolute
! 125: self.cgiUrl=urlparse.urljoin(self.absolute_url(), cgiUrl)
! 126: else:
! 127: self.cgiUrl=cgiUrl
! 128:
! 129: if RESPONSE:
! 130: RESPONSE.redirect("manage_main")
1.2 dwinter 131:
132: def index_html(self,repeat=None):
133: """standard ausgabe"""
1.4 ! dwinter 134:
1.2 dwinter 135: threadName=repeat
136:
137: if not threadName or threadName=="":
1.4 ! dwinter 138:
! 139: #abwaertskompatibilitt mit altem nivht konfigurierbaren prototypen
! 140:
! 141: if getattr(self,'cgiUrl','')=='':
! 142: self.cgiUrl="http://medea.mpiwg-berlin.mpg.de/cgi-bin/search/q1"
! 143:
1.2 dwinter 144: qs="%s?%s"%(self.cgiUrl,self.REQUEST['QUERY_STRING'])
145: xsl=self.absolute_url()+"/xslt"
1.4 ! dwinter 146: self._v_xmltrans=getXML().__of__(self)
! 147: #self._xmltrans.start()
! 148: thread=Thread(target=self._v_xmltrans)
! 149: thread.start()
! 150: self._v_xmltrans.set(qs,xsl,None)
! 151: self._v_xmltrans.run()
1.2 dwinter 152:
153:
154: self.threadName=thread.getName()[0:]
155: wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template'])
156: if wait_template:
157: return wait_template[0][1]()
158: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','xsltWait.zpt')).__of__(self)
159: return pt()
1.4 ! dwinter 160: #_v_xmltrans.run()
1.2 dwinter 161:
162: else:
163:
1.4 ! dwinter 164: if (self._v_xmltrans.getResult()==None):
1.3 dwinter 165:
166: wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template'])
167: if wait_template:
168: return wait_template[0][1]()
1.2 dwinter 169:
170: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','xsltWait.zpt')).__of__(self)
171: return pt()
172: else:
1.4 ! dwinter 173: return self._v_xmltrans.getResult()
1.2 dwinter 174:
175:
1.1 dwinter 176: def manage_addECHO_xsltForm(self):
177: """Form for adding"""
178: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_xslt.zpt')).__of__(self)
179: return pt()
180:
181: from urllib import quote
182:
183:
1.4 ! dwinter 184: def manage_addECHO_xslt(self, id, label, weight= 0,contentType=0,title=None, text=None, cgiUrl=None,
1.1 dwinter 185: REQUEST=None, submit=None):
186: "Add a Page Template with optional file content."
187:
188:
189: id = str(id)
190: if REQUEST is None:
191: self._setObject(id, ECHO_xslt(id, text))
192: ob = getattr(self, id)
193: setattr(ob,'weight',weight)
194: setattr(ob,'label',label)
195: setattr(ob,'contentType',contentType)
196: if title:
197: ob.pt_setTitle(title)
198: return ob
1.4 ! dwinter 199: setattr(ob,'cgiUrl',cgiUrl)
1.1 dwinter 200: else:
201: file = REQUEST.form.get('file')
202: headers = getattr(file, 'headers', None)
203: if headers is None or not file.filename:
204: zpt = ECHO_xslt(id)
205: else:
206: zpt = ECHO_xslt(id, file, headers.get('contentType'))
207:
208: self._setObject(id, zpt)
209: ob = getattr(self, id)
210: setattr(ob,'weight',weight)
211: setattr(ob,'label',label)
1.4 ! dwinter 212: setattr(ob,'cgiUrl',cgiUrl)
1.1 dwinter 213: if title:
214: ob.pt_setTitle(title)
215:
216: try:
217: u = self.DestinationURL()
218: except AttributeError:
219: u = REQUEST['URL1']
220:
221: if submit == " Add and Edit ":
222: u = "%s/%s" % (u, quote(id))
223: REQUEST.RESPONSE.redirect(u+'/manage_main')
224: return ''
225:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>