File:  [Repository] / ECHO_content / ECHO_xslt.py
Revision 1.2: download - view: text, annotated - select for diffs - revision graph
Sun Apr 10 11:37:03 2005 UTC (19 years, 1 month ago) by dwinter
Branches: MAIN
CVS tags: HEAD
experimental xslt with threading

CV:S ---------------------------------------------------------------------

### XSLT Class ###
### setzt 4 suite vorraus ###

from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from Globals import DTMLFile
from ECHO_Nav import ECHO_pageTemplate
from threading import Thread,Timer

from Globals import package_home

import os.path

import urllib

try:
    from Ft.Xml.Xslt.Processor import Processor
    from Ft.Xml import InputSource
    
except:
    print "4suite has to be installed"


class getXML:
    """get XML thread"""

    def __init__(self,qs,xsl):

        self.qs=qs
        self.xsl=xsl
        self.result=None

    def __call__(self):

        urlH=urllib.urlopen(self.qs)
        xml=urlH.read()
        urlH.close()
        
       
        xsltproc=Processor()
        document = InputSource.DefaultFactory.fromString(xml)
        stylesheet = InputSource.DefaultFactory.fromUri(self.xsl)
        xsltproc.appendStylesheet(stylesheet)
        
        self.result=xsltproc.run(document)
       
        
    def getResult(self):
        return self.result



    
class ECHO_xslt(ECHO_pageTemplate):
    """ECHO_xslt classe"""

    meta_type="ECHO_xslt"
    def refreshTxt(self):
        """txt fuer refresh"""
        return """ 2;url=%s?repeat=%s """%(self.absolute_url(),self.threadName)

    def xslt(self):
        """xslt"""
        return self.pt_render()



        
    def index_html(self,repeat=None):
        """standard ausgabe"""
        threadName=repeat
        

        if not threadName or threadName=="":
            self.cgiUrl="http://medea.mpiwg-berlin.mpg.de/cgi-bin/search/q1"

            qs="%s?%s"%(self.cgiUrl,self.REQUEST['QUERY_STRING'])
            xsl=self.absolute_url()+"/xslt"
            self.xmltrans=getXML(qs,xsl)
            thread=Thread(target=self.xmltrans)
            
            thread.start()
            
            self.threadName=thread.getName()[0:]
            wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template'])
            if wait_template:
                return wait_template[0][1]()
            pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','xsltWait.zpt')).__of__(self)
            return pt()
        #xmltrans.run()
        
        else:
            
            if (self.xmltrans.getResult()==None):
                killThread(self.xmltrans)
                
                pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','xsltWait.zpt')).__of__(self)
                return pt()
            else:
                return self.xmltrans.getResult()


def killThread(thread):
    print "killing"
    del thread
    
def manage_addECHO_xsltForm(self):
    """Form for adding"""
    pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_xslt.zpt')).__of__(self)
    return pt()

from urllib import quote


def manage_addECHO_xslt(self, id, label, weight= 0,contentType=0,title=None, text=None,
                           REQUEST=None, submit=None):
    "Add a Page Template with optional file content."

    
    id = str(id)
    if REQUEST is None:
        self._setObject(id, ECHO_xslt(id, text))
        ob = getattr(self, id)
        setattr(ob,'weight',weight)
        setattr(ob,'label',label)
        setattr(ob,'contentType',contentType)
        if title:
            ob.pt_setTitle(title)
        return ob
    else:
        file = REQUEST.form.get('file')
        headers = getattr(file, 'headers', None)
        if headers is None or not file.filename:
            zpt = ECHO_xslt(id)
        else:
            zpt = ECHO_xslt(id, file, headers.get('contentType'))

        self._setObject(id, zpt)
        ob = getattr(self, id)
        setattr(ob,'weight',weight)
        setattr(ob,'label',label)
        if title:
            ob.pt_setTitle(title)
        
        try:
            u = self.DestinationURL()
        except AttributeError:
            u = REQUEST['URL1']

        if submit == " Add and Edit ":
            u = "%s/%s" % (u, quote(id))
        REQUEST.RESPONSE.redirect(u+'/manage_main')
    return ''


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>