Diff for /ECHO_content/ECHO_xslt.py between versions 1.5 and 1.9

version 1.5, 2005/10/26 08:35:53 version 1.9, 2006/09/10 22:57:38
Line 7  from ECHO_Nav import ECHO_pageTemplate Line 7  from ECHO_Nav import ECHO_pageTemplate
 from threading import Thread,Timer  from threading import Thread,Timer
 import threading  import threading
 from ECHO_helpers import *  from ECHO_helpers import *
   import ECHO_language
 import sys  import sys
 import urllib  import urllib
 import urlparse  import urlparse
   from Ft.Xml.Domlette import Print, PrettyPrint
   from StringIO import StringIO
   from types import *
 from Globals import package_home  from Globals import package_home
   import transaction
   
 import os.path  import os.path
   
Line 22  import urllib Line 23  import urllib
   
 try:  try:
     from Ft.Xml.Xslt.Processor import Processor      from Ft.Xml.Xslt.Processor import Processor
     from Ft.Xml import InputSource      from Ft.Xml import InputSource, EMPTY_NAMESPACE,Parse
       
 except:  except:
     print "4suite has to be installed"      print "4suite has to be installed"
   
Line 94  class getXML(Implicit): Line 94  class getXML(Implicit):
   
         return self.result          return self.result
   
   from ZODB import DB
   from ZODB.FileStorage import FileStorage
   class ECHO_cache:
       def __init__(self):
           """init the storage"""
           self.storage=FileStorage("/var/tmp/echo_cache.fs")
           self.db=DB(self.storage)    
           self.connection=self.db.open()
           self.root=self.connection.root()
       
       def deleteObject(self,name,pn=None):
           """delete an object from cache"""
           fileStore=self.root.get(name,None)
           if fileStore:
               if not pn:
                   del(self.root[name])
               else:
                   if self.root[name].get(pn,None):
                       del(self.root[name][pn])
                       
           
       def storeObject(self,name,pn,object):
           """store an object"""
           
           if not self.root.get(name,None):
               self.root[name]={}
               
   
           #following is necessary to make clear that object has really changed for ZODB
           tmp=self.root[name]
           tmp[pn]=object
           self.root[name]=tmp
           transaction.get().commit()
           return True
      
       def retrieveObject(self,name,pn):
           """retrieve it"""
           
           fileStore=self.root.get(name,None)
           if not fileStore:
               return None
           else:
               return self.root[name].get(pn,None)
   
           
 class ECHO_xslt(ECHO_pageTemplate):  class ECHO_xslt(ECHO_pageTemplate,ECHO_language.ECHO_language):
     """ECHO_xslt classe"""      """ECHO_xslt classe"""
   
     meta_type="ECHO_xslt"      meta_type="ECHO_xslt"
           
       cache=ECHO_cache()
       
     results={}      results={}
     manage_options=ECHO_pageTemplate.manage_options+(      manage_options=ECHO_pageTemplate.manage_options+(
      {'label':'Change xml-ressource','action':'change_ECHO_xsltForm'},)       {'label':'Change xml-ressource','action':'change_ECHO_xsltForm'},)
Line 141  class ECHO_xslt(ECHO_pageTemplate): Line 186  class ECHO_xslt(ECHO_pageTemplate):
             if getattr(self,'cgiUrl','')=='':              if getattr(self,'cgiUrl','')=='':
                 self.cgiUrl="http://medea.mpiwg-berlin.mpg.de/cgi-bin/search/q1"                  self.cgiUrl="http://medea.mpiwg-berlin.mpg.de/cgi-bin/search/q1"
                                   
             qs="%s?%s"%(self.cgiUrl,self.REQUEST['QUERY_STRING'])              qs="%s%s"%(self.cgiUrl,self.REQUEST['QUERY_STRING'])
             xsl=self.absolute_url()+"/xslt"              xsl=self.absolute_url()+"/xslt"
             self._v_xmltrans=getXML().__of__(self)              self._v_xmltrans=getXML().__of__(self)
             #self._xmltrans.start()              #self._xmltrans.start()
Line 173  class ECHO_xslt(ECHO_pageTemplate): Line 218  class ECHO_xslt(ECHO_pageTemplate):
                 return self._v_xmltrans.getResult()                  return self._v_xmltrans.getResult()
   
           
   
       def deleteCache(self):
           """deletefrom cache"""
           fn=self.REQUEST['fn']
           self.cache.deleteObject(fn)
           
       def getPageLex(self,_pn="1",_caching="yes"):
           """getpage mit lexikalischer analyse und xslt transform
           if _caching=yes dann wird die lwxikalisch analysierte seite in einem cache abgespeichert
           """
          
           fn=self.REQUEST['fn']
   
           
           fromCache=self.cache.retrieveObject(fn,_pn)
   
           if fromCache and _caching=="yes":
               print "retrieve",fn,_pn 
               txt = fromCache
           else:
               txt=self.tagLex(nr=_pn)   
               print "store",fn,_pn 
               self.cache.storeObject(fn,_pn,txt[0:])
           
           xsl=self.xslt()
           
           xsltproc=Processor()
           if type(txt)==UnicodeType:
               document = InputSource.DefaultFactory.fromString(txt.encode('utf-8'))
           else:
               document = InputSource.DefaultFactory.fromString(txt)
           stylesheet = InputSource.DefaultFactory.fromString(xsl)
           xsltproc.appendStylesheet(stylesheet)
           tmp=xsltproc.run(document)
           
           return tmp[0:]
               
   
       def getPage(self,_pn,REQUEST=None):
           """get a page from an xml"""
           pn=int(_pn)-1
           if pn<0:
               if REQUEST:
                   return "Sorry, pagenumbers have to be greater than 0"
               else:
                   return None
           impl=xml.dom.getDOMImplementation()
           newDoc=impl.createDocument(EMPTY_NAMESPACE,None,None
                                      )
           root=newDoc.createElement('page')
           newDoc.appendChild(root)
           
           
           qs="%s%s"%(self.cgiUrl,self.REQUEST['QUERY_STRING'])
           
           
        
           xmlt=urllib.urlopen(qs).read()
           dom=Parse(xmlt)
          
           pbs=dom.xpath("//pb")
           if pn > len(pbs):
               if REQUEST:
                   return "Sorry, pagenumber %s does not exit"%pn+1
               else:
                   return None
               
           beginNode=pbs[pn] #take the n'th pb
   
           if not (pn==len(pbs)-1): # nicht die letzte Seite
               endNode=pbs[pn+1]
           else:
               endNode=None
           
              
   #        follower=beginNode.xpath('following::node()')
   #        #root.appendChild(beginNode)
   #        found=[]
   #       
   #        for node in endNode.xpath('preceding::node()'):
   #            if node in follower:
   #                found.append(node)
   #    
           
      
           #rempove all children of parents which are also in the list
   #        for x in found:
   #            for child in x.xpath(".//*"):
   #                try:
   #                  
   #                    nr=found.index(child)
   #               
   #                    del(found[nr])
   #                except:
   #                    pass
   #
   #        found.append(endNode)
   #       
           deleteNodes=beginNode.xpath('preceding::node()')
           if endNode:
               deleteNodes+=endNode.xpath('following::node()')
           for node in deleteNodes:
               try:
                   parent=node.xpath("..")
              
                   if parent:
                       parent[0].removeChild(node)
               except:
                   zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])
           strio = StringIO()
           PrettyPrint(dom,strio) 
           xmlstr = strio.getvalue()
   
           return xmlstr
   
   
           
 def manage_addECHO_xsltForm(self):  def manage_addECHO_xsltForm(self):
     """Form for adding"""      """Form for adding"""
     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_xslt.zpt')).__of__(self)      pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_xslt.zpt')).__of__(self)

Removed from v.1.5  
changed lines
  Added in v.1.9


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