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:             #abwaertskompatibilitŠt 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>