Annotation of ECHO_content/ECHO_xslt.py, revision 1.3
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):
1.3 ! dwinter 33: try:
! 34: urlH=urllib.urlopen(self.qs)
! 35: xml=urlH.read()
! 36: urlH.close()
1.2 dwinter 37:
38:
1.3 ! dwinter 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: except:
! 46: self.result="<html>error</html>"
1.2 dwinter 47:
48: def getResult(self):
49: return self.result
50:
51:
52:
53:
1.1 dwinter 54: class ECHO_xslt(ECHO_pageTemplate):
55: """ECHO_xslt classe"""
56:
57: meta_type="ECHO_xslt"
1.2 dwinter 58: def refreshTxt(self):
59: """txt fuer refresh"""
60: return """ 2;url=%s?repeat=%s """%(self.absolute_url(),self.threadName)
1.1 dwinter 61:
62: def xslt(self):
1.2 dwinter 63: """xslt"""
64: return self.pt_render()
1.1 dwinter 65:
66:
67:
1.2 dwinter 68:
69: def index_html(self,repeat=None):
70: """standard ausgabe"""
71: threadName=repeat
72:
1.1 dwinter 73:
1.2 dwinter 74: if not threadName or threadName=="":
75: self.cgiUrl="http://medea.mpiwg-berlin.mpg.de/cgi-bin/search/q1"
1.1 dwinter 76:
1.2 dwinter 77: qs="%s?%s"%(self.cgiUrl,self.REQUEST['QUERY_STRING'])
78: xsl=self.absolute_url()+"/xslt"
79: self.xmltrans=getXML(qs,xsl)
80: thread=Thread(target=self.xmltrans)
81:
82: thread.start()
83:
84: self.threadName=thread.getName()[0:]
85: wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template'])
86: if wait_template:
87: return wait_template[0][1]()
88: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','xsltWait.zpt')).__of__(self)
89: return pt()
90: #xmltrans.run()
91:
92: else:
93:
94: if (self.xmltrans.getResult()==None):
1.3 ! dwinter 95:
! 96: wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template'])
! 97: if wait_template:
! 98: return wait_template[0][1]()
1.2 dwinter 99:
100: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','xsltWait.zpt')).__of__(self)
101: return pt()
102: else:
103: return self.xmltrans.getResult()
104:
105:
106:
1.1 dwinter 107: def manage_addECHO_xsltForm(self):
108: """Form for adding"""
109: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_xslt.zpt')).__of__(self)
110: return pt()
111:
112: from urllib import quote
113:
114:
115: def manage_addECHO_xslt(self, id, label, weight= 0,contentType=0,title=None, text=None,
116: REQUEST=None, submit=None):
117: "Add a Page Template with optional file content."
118:
119:
120: id = str(id)
121: if REQUEST is None:
122: self._setObject(id, ECHO_xslt(id, text))
123: ob = getattr(self, id)
124: setattr(ob,'weight',weight)
125: setattr(ob,'label',label)
126: setattr(ob,'contentType',contentType)
127: if title:
128: ob.pt_setTitle(title)
129: return ob
130: else:
131: file = REQUEST.form.get('file')
132: headers = getattr(file, 'headers', None)
133: if headers is None or not file.filename:
134: zpt = ECHO_xslt(id)
135: else:
136: zpt = ECHO_xslt(id, file, headers.get('contentType'))
137:
138: self._setObject(id, zpt)
139: ob = getattr(self, id)
140: setattr(ob,'weight',weight)
141: setattr(ob,'label',label)
142: if title:
143: ob.pt_setTitle(title)
144:
145: try:
146: u = self.DestinationURL()
147: except AttributeError:
148: u = REQUEST['URL1']
149:
150: if submit == " Add and Edit ":
151: u = "%s/%s" % (u, quote(id))
152: REQUEST.RESPONSE.redirect(u+'/manage_main')
153: return ''
154:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>