Annotation of ECHO_content/ECHO_xslt.py, revision 1.5
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.5 ! dwinter 66:
1.4 dwinter 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:
1.5 ! dwinter 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>