Annotation of ECHO_content/ECHO_xslt.py, revision 1.6
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
1.6 ! dwinter 13: from Ft.Xml.Domlette import Print, PrettyPrint
1.4 dwinter 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
1.6 ! dwinter 25: from Ft.Xml import InputSource, EMPTY_NAMESPACE,Parse
1.1 dwinter 26: except:
27: print "4suite has to be installed"
28:
29:
1.4 dwinter 30: class getXML(Implicit):
1.2 dwinter 31: """get XML thread"""
32:
1.4 dwinter 33: def set(self,qs,xsl,result):
34: """set"""
35:
36: self._v_qs=qs
1.2 dwinter 37: self.xsl=xsl
1.4 dwinter 38: self.result=None
1.2 dwinter 39:
1.4 dwinter 40: # def acquireLock(self):
41: #
42: # lock=getattr(self, "_v_lock", None)
43: # if not lock:
44: # self._v_lock=threading.Lock()
45: # lock=self._v_lock
46: # lock.acquire()
47: #
48: # def releaseLock(self):
49: # # acquire() should have been called
50: # # about one second before. This means the volatile lock
51: # # should still be there
52: #
53: # self._v_lock.release()
54: #
55:
1.2 dwinter 56: def __call__(self):
1.4 dwinter 57: """wait"""
58: return True
59:
60: def run(self):
61: """call it"""
62: xml=""
1.6 ! dwinter 63: print "X",self._v_qs
1.3 dwinter 64: try:
1.5 dwinter 65:
1.4 dwinter 66: urlH=urllib.urlopen(self._v_qs)
67: xml=urlH.read()
68: urlH.close()
69: xsltproc=Processor()
70: document = InputSource.DefaultFactory.fromString(xml)
71:
72: stylesheet = InputSource.DefaultFactory.fromUri(self.xsl)
73:
74: xsltproc.appendStylesheet(stylesheet)
75:
76:
77: #print self.xsl
78: #print xsltproc.run(document)
79: tmp=xsltproc.run(document)
80:
81: self.result=tmp[0:]
82:
1.3 dwinter 83:
84: except:
1.4 dwinter 85:
86: self.result="<html>error: %s %s<br>"%sys.exc_info()[0:2]
87: self.result+=xml
88: self.result+="</html>"
1.2 dwinter 89:
1.4 dwinter 90:
91:
1.2 dwinter 92: def getResult(self):
1.4 dwinter 93:
1.2 dwinter 94: return self.result
95:
96:
97:
1.1 dwinter 98: class ECHO_xslt(ECHO_pageTemplate):
99: """ECHO_xslt classe"""
100:
101: meta_type="ECHO_xslt"
1.4 dwinter 102:
103: results={}
104: manage_options=ECHO_pageTemplate.manage_options+(
105: {'label':'Change xml-ressource','action':'change_ECHO_xsltForm'},)
106:
1.2 dwinter 107: def refreshTxt(self):
108: """txt fuer refresh"""
109: return """ 2;url=%s?repeat=%s """%(self.absolute_url(),self.threadName)
1.1 dwinter 110:
111: def xslt(self):
1.2 dwinter 112: """xslt"""
1.1 dwinter 113:
1.4 dwinter 114: return self.document_src()
1.1 dwinter 115:
1.4 dwinter 116: def change_ECHO_xsltForm(self):
117: """change form"""
118: pt=zptFile(self, 'zpt/ChangeECHO_xsltForm.zpt')
119: return pt()
120:
121: def addChanges(self,cgiUrl,RESPONSE=None):
122: """change the xslt, ueberschriebt addChanges in ECHO_PageTemplate"""
123: if urlparse.urlparse(cgiUrl)[0]=="":#relative url in absolute
124: self.cgiUrl=urlparse.urljoin(self.absolute_url(), cgiUrl)
125: else:
126: self.cgiUrl=cgiUrl
127:
128: if RESPONSE:
129: RESPONSE.redirect("manage_main")
1.2 dwinter 130:
131: def index_html(self,repeat=None):
132: """standard ausgabe"""
1.4 dwinter 133:
1.2 dwinter 134: threadName=repeat
135:
136: if not threadName or threadName=="":
1.4 dwinter 137:
138: #abwaertskompatibilitt mit altem nivht konfigurierbaren prototypen
139:
140: if getattr(self,'cgiUrl','')=='':
141: self.cgiUrl="http://medea.mpiwg-berlin.mpg.de/cgi-bin/search/q1"
142:
1.6 ! dwinter 143: qs="%s%s"%(self.cgiUrl,self.REQUEST['QUERY_STRING'])
1.2 dwinter 144: xsl=self.absolute_url()+"/xslt"
1.4 dwinter 145: self._v_xmltrans=getXML().__of__(self)
146: #self._xmltrans.start()
147: thread=Thread(target=self._v_xmltrans)
148: thread.start()
149: self._v_xmltrans.set(qs,xsl,None)
150: self._v_xmltrans.run()
1.2 dwinter 151:
152:
153: self.threadName=thread.getName()[0:]
154: wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template'])
155: if wait_template:
156: return wait_template[0][1]()
157: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','xsltWait.zpt')).__of__(self)
158: return pt()
1.4 dwinter 159: #_v_xmltrans.run()
1.2 dwinter 160:
161: else:
162:
1.4 dwinter 163: if (self._v_xmltrans.getResult()==None):
1.3 dwinter 164:
1.5 dwinter 165: wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template'])
166: if wait_template:
167: return wait_template[0][1]()
1.2 dwinter 168:
169: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','xsltWait.zpt')).__of__(self)
170: return pt()
171: else:
1.4 dwinter 172: return self._v_xmltrans.getResult()
1.2 dwinter 173:
174:
1.6 ! dwinter 175: def getPage(self,pn):
! 176: """get a page from an xml"""
! 177: pn=int(pn)
! 178: impl=xml.dom.getDOMImplementation()
! 179: newDoc=impl.createDocument(EMPTY_NAMESPACE,None,None
! 180: )
! 181: root=newDoc.createElement('page')
! 182: newDoc.appendChild(root)
! 183:
! 184: xmlt=urllib.urlopen("%s"%self.cgiUrl).read()
! 185: dom=Parse(xmlt)
! 186:
! 187: pbs=dom.xpath("//pb")
! 188: beginNode=pbs[pn] #take the n'th pb
! 189: endNode=pbs[pn+1]
! 190: follower=beginNode.xpath('following::node()')
! 191: #root.appendChild(beginNode)
! 192: found=[]
! 193:
! 194: for node in endNode.xpath('preceding::node()'):
! 195: if node in follower:
! 196: found.append(node)
! 197:
! 198: #rempove all children of parents which are also in the list
! 199: for x in found:
! 200: for child in x.xpath(".//*"):
! 201: try:
! 202:
! 203: nr=found.index(child)
! 204:
! 205: del(found[nr])
! 206: except:
! 207: pass
! 208:
! 209: found.append(endNode)
! 210:
! 211: for x in found:
! 212: PrettyPrint(x)
! 213:
! 214:
! 215:
1.1 dwinter 216: def manage_addECHO_xsltForm(self):
217: """Form for adding"""
218: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_xslt.zpt')).__of__(self)
219: return pt()
220:
221: from urllib import quote
222:
223:
1.4 dwinter 224: def manage_addECHO_xslt(self, id, label, weight= 0,contentType=0,title=None, text=None, cgiUrl=None,
1.1 dwinter 225: REQUEST=None, submit=None):
226: "Add a Page Template with optional file content."
227:
228:
229: id = str(id)
230: if REQUEST is None:
231: self._setObject(id, ECHO_xslt(id, text))
232: ob = getattr(self, id)
233: setattr(ob,'weight',weight)
234: setattr(ob,'label',label)
235: setattr(ob,'contentType',contentType)
236: if title:
237: ob.pt_setTitle(title)
238: return ob
1.4 dwinter 239: setattr(ob,'cgiUrl',cgiUrl)
1.1 dwinter 240: else:
241: file = REQUEST.form.get('file')
242: headers = getattr(file, 'headers', None)
243: if headers is None or not file.filename:
244: zpt = ECHO_xslt(id)
245: else:
246: zpt = ECHO_xslt(id, file, headers.get('contentType'))
247:
248: self._setObject(id, zpt)
249: ob = getattr(self, id)
250: setattr(ob,'weight',weight)
251: setattr(ob,'label',label)
1.4 dwinter 252: setattr(ob,'cgiUrl',cgiUrl)
1.1 dwinter 253: if title:
254: ob.pt_setTitle(title)
255:
256: try:
257: u = self.DestinationURL()
258: except AttributeError:
259: u = REQUEST['URL1']
260:
261: if submit == " Add and Edit ":
262: u = "%s/%s" % (u, quote(id))
263: REQUEST.RESPONSE.redirect(u+'/manage_main')
264: return ''
265:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>