File:  [Repository] / ECHO_content / ECHO_xslt.py
Revision 1.4: download - view: text, annotated - select for diffs - revision graph
Sun Oct 23 09:46:26 2005 UTC (18 years, 8 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
echo xslt neu

    1: ### XSLT Class ###
    2: ### setzt 4 suite vorraus ###
    3: from Acquisition import Implicit
    4: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
    5: from Globals import DTMLFile
    6: from ECHO_Nav import ECHO_pageTemplate
    7: from threading import Thread,Timer
    8: import threading
    9: from ECHO_helpers import *
   10: import sys
   11: import urllib
   12: import urlparse
   13: 
   14: 
   15: 
   16: from Globals import package_home
   17: 
   18: 
   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: 
   31: class getXML(Implicit):
   32:     """get XML thread"""
   33: 
   34:     def set(self,qs,xsl,result):
   35:         """set"""
   36:    
   37:         self._v_qs=qs
   38:         self.xsl=xsl
   39:         self.result=None        
   40: 
   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:   
   57:     def __call__(self):
   58:         """wait"""
   59:         return True
   60:     
   61:     def run(self):
   62:         """call it"""
   63:         xml=""
   64:         
   65:         try:
   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:             
   84:         
   85:        	except:
   86:                
   87:                self.result="<html>error: %s %s<br>"%sys.exc_info()[0:2]
   88:                self.result+=xml
   89:                self.result+="</html>"
   90:         
   91:         
   92:     
   93:     def getResult(self):
   94: 
   95:         return self.result
   96: 
   97: 
   98:     
   99: class ECHO_xslt(ECHO_pageTemplate):
  100:     """ECHO_xslt classe"""
  101: 
  102:     meta_type="ECHO_xslt"
  103:     
  104:     results={}
  105:     manage_options=ECHO_pageTemplate.manage_options+(
  106:      {'label':'Change xml-ressource','action':'change_ECHO_xsltForm'},)
  107:      
  108:     def refreshTxt(self):
  109:         """txt fuer refresh"""
  110:         return """ 2;url=%s?repeat=%s """%(self.absolute_url(),self.threadName)
  111: 
  112:     def xslt(self):
  113:         """xslt"""
  114: 
  115:         return self.document_src()
  116: 
  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")
  131:         
  132:     def index_html(self,repeat=None):
  133:         """standard ausgabe"""
  134: 
  135:         threadName=repeat
  136:         
  137:         if not threadName or threadName=="":
  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:                 
  144:             qs="%s?%s"%(self.cgiUrl,self.REQUEST['QUERY_STRING'])
  145:             xsl=self.absolute_url()+"/xslt"
  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()
  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()
  160:             #_v_xmltrans.run()
  161:         
  162:         else:
  163:             
  164:             if (self._v_xmltrans.getResult()==None):
  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]()
  169:                 
  170:                 pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','xsltWait.zpt')).__of__(self)
  171:                 return pt()
  172:             else:
  173:                 return self._v_xmltrans.getResult()
  174: 
  175:     
  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: 
  184: def manage_addECHO_xslt(self, id, label, weight= 0,contentType=0,title=None, text=None, cgiUrl=None,
  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
  199:         setattr(ob,'cgiUrl',cgiUrl)
  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)
  212:         setattr(ob,'cgiUrl',cgiUrl)
  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>