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