Diff for /ECHO_content/VLPExtension.py between versions 1.81 and 1.94

version 1.81, 2008/11/13 14:35:53 version 1.94, 2010/10/11 13:15:00
Line 17  from types import * Line 17  from types import *
 from Globals import package_home  from Globals import package_home
 import transaction  import transaction
 import Acquisition  import Acquisition
   import re
   import logging
   
 from Products.ECHO_content.ECHO_collection import *  from Products.ECHO_content.ECHO_collection import *
 from vlp_xmlhelpers import *  from vlp_xmlhelpers import *
Line 163  def manage_addSendMailForm(self, id, toA Line 165  def manage_addSendMailForm(self, id, toA
   
                   
 class VLP_collectionFolder(Folder):  class VLP_collectionFolder(Folder):
     """klasse fŸr folder innheralb der collection"""      """klasse fuer folder innerhalb der collection"""
     meta_type="VLP_collectionFolder"      meta_type="VLP_collectionFolder"
           
 class VLP_essay(Folder):  class VLP_essay(Folder):
Line 308  class VLP_essay(Folder): Line 310  class VLP_essay(Folder):
             #txt=pages[int(pagenum)-1][1].data.decode('utf-8')              #txt=pages[int(pagenum)-1][1].data.decode('utf-8')
             txt=pages[int(pagenum)-1][1].data              txt=pages[int(pagenum)-1][1].data
             #print txt.encode('utf-8')              #print txt.encode('utf-8')
             return self.xml2html(makeXML(txt),quote="no")              tmp =makeXML(txt)
               logging.debug(txt)
               return self.xml2html(tmp,quote="no")
         else:          else:
             return self.xml2html(makeXML(pages[int(pagenum)-1][1]()),quote="no")              return self.xml2html(makeXML(pages[int(pagenum)-1][1]()),quote="no")
                   
Line 486  def manage_addVLP_subCollection(self,id, Line 490  def manage_addVLP_subCollection(self,id,
 from zope.publisher.interfaces import IPublishTraverse  from zope.publisher.interfaces import IPublishTraverse
 from zope.interface import implements  from zope.interface import implements
 from zope.publisher.interfaces import NotFound   from zope.publisher.interfaces import NotFound 
 from zope.app import zapi   #from zope.app import zapi 
 from zope.component import queryMultiAdapter  from zope.component import queryMultiAdapter
   try:
 from ZPublisher.BaseRequest import DefaultPublishTraverse  from ZPublisher.BaseRequest import DefaultPublishTraverse
   except:
       pass
   
 class VLP_collection(ECHO_collection,Acquisition.Explicit):  class VLP_collection(ECHO_collection,Acquisition.Explicit):
     """VLP spezifische Erweiterung der Collection"""      """VLP spezifische Erweiterung der Collection"""
Line 496  class VLP_collection(ECHO_collection,Acq Line 503  class VLP_collection(ECHO_collection,Acq
   
           
     implements(IPublishTraverse)      implements(IPublishTraverse)
       
       
       def foxridgePath2vlp(self,url,mk,RESPONSE=None):
           """convertiert einen pfad zu einer url in vlp"""
           litRe = re.match(r".*lit([0-9]*)",url)
           logging.debug("foxridgePath2vlp URL:"+repr(url))
           lit = "lit"+litRe.group(1)
           splitted=url.split("/")
           path=splitted[-1].split(".")[0]
           newUrl=lit+"?p=%s&mk=%s"%(path,mk)
           
           if RESPONSE:
               RESPONSE.redirect(newUrl)
               return
               
           return newUrl
         
     def findObjFromLitName(self,fileName):      def findObjFromLitName(self,fileName):
         if not fileName[0:3]=="lit":          if not fileName[0:3]=="lit":
             logging.error("getOrCreateFolder wrong filename: %s"%fileName)              logging.error("getOrCreateFolder wrong filename: %s"%fileName)
Line 520  class VLP_collection(ECHO_collection,Acq Line 544  class VLP_collection(ECHO_collection,Acq
                   
         actual_url=request['ACTUAL_URL']          actual_url=request['ACTUAL_URL']
         lastActual=actual_url.split("/")[-1]          lastActual=actual_url.split("/")[-1]
                   logging.debug("pub_trav:"+actual_url)
         
         if name.startswith("lit"): #umleitung wenn lit aufgerufen wirk          if name.startswith("lit"): #umleitung wenn lit aufgerufen wirk
             # umleitung auf den eigentlichen folder nur wenn direkt der Folder litXXX oder dessen index_html methode aufgerufen wird              # umleitung auf den eigentlichen folder nur wenn direkt der Folder litXXX oder dessen index_html methode aufgerufen wird
             if lastActual.startswith("lit") or (lastActual=="index_html") or (lastActual=="index_meta"):              if lastActual.startswith("lit") or (lastActual=="index_html") or (lastActual=="index_meta") or   (lastActual=="getTitle") or   (lastActual=="getMetaDataLink") or (lastActual=="hasTranscription") or (lastActual=="transcription"): 
                 #obj=self. ZopeFind(self,obj_ids=[name],search_sub=1)                  #obj=self. ZopeFind(self,obj_ids=[name],search_sub=1)
                 ob=self.findObjFromLitName(name)                  ob=self.findObjFromLitName(name)
                 if not ob:                  if not ob:
                     return "LIt not found"                      return "LIt not found"
                 else:                  else:
                       
                     logging.error("request:"+repr(ob))                      logging.debug("request:"+repr(ob))
                     request.response.setStatus(200)                      request.response.setStatus(200)
                     #if (lastActual=="index_meta"):                      #if (lastActual=="index_meta"):
                    #     logging.debug("index_meta requested")                     #     logging.debug("index_meta requested")
                    #     return ob.index_meta                     #     return ob.index_meta
                     return ob                      return ob
                   
             else: ## andern falls transversiere zum parent.              else: ## andern falls transversiere zum parent.
                 obj = self.aq_parent                  obj = self.aq_parent
                 return obj                  return obj
Line 556  class VLP_collection(ECHO_collection,Acq Line 581  class VLP_collection(ECHO_collection,Acq
         {'label':'Update Library','action':'updateCollection'},          {'label':'Update Library','action':'updateCollection'},
         {'label':'Update Metadata','action':'updateCollectionMD'},          {'label':'Update Metadata','action':'updateCollectionMD'},
         )          )
       def getAllRessources(self):
           """getallressources"""
           res=self.ZopeFind(self,obj_metatypes=['VLP_resource'],search_sub=1)
           ret=[]
           for r in res:
               ret.append([r[0],r[1].absolute_url()])
           
           return ret
   
     def generateSubCollections(self,errorsTXT="",forceUpdate=False,RESPONSE=None):      def generateSubCollections(self,errorsTXT="",forceUpdate=False,RESPONSE=None):
         """erzeuge subcollectionen"""          """erzeuge subcollectionen"""
Line 573  class VLP_collection(ECHO_collection,Acq Line 606  class VLP_collection(ECHO_collection,Acq
                 if foundCol:                  if foundCol:
                     col = foundCol                      col = foundCol
                     logging.debug("generateSubCollections: subcollection %s exists (%s)"%(repr(col),found.reference))                      logging.debug("generateSubCollections: subcollection %s exists (%s)"%(repr(col),found.reference))
                     if (col.title != found.titlerefdisplay) or (col.label != found.titlerefdisplay):                      logging.debug(repr([col.title,found.titlerefdisplay,col.label,found.titlerefdisplay]))
                       if (unicodify(col.title) != unicodify(found.titlerefdisplay)) or (unicodify(col.label) != unicodify(found.titlerefdisplay)):
                         # subcollection seems to have changed                              # subcollection seems to have changed    
                         logging.debug("generateSubCollections: subcollection has changed, recreating!")                          logging.debug("generateSubCollections: subcollection has changed, recreating!")
                         col.aq_parent.manage_delObjects([col.getId()])                          col.aq_parent.manage_delObjects([col.getId()])
Line 602  class VLP_collection(ECHO_collection,Acq Line 636  class VLP_collection(ECHO_collection,Acq
                 error=sys.exc_info()[0:2]                  error=sys.exc_info()[0:2]
                 logging.error("generateSubCollections: ERROR in %s"%litid)                  logging.error("generateSubCollections: ERROR in %s"%litid)
                 if RESPONSE is not None:                  if RESPONSE is not None:
                       RESPONSE.write("<p>(ERROR  updateII(%s): %s %s  TXT: %s)\n</p>"%(litid,error[0],error[1],sys.exc_info()[2]))
                     RESPONSE.write("<p>(ERROR (%s): %s %s)</p>\n"%(litid,error[0],error[1]))                      RESPONSE.write("<p>(ERROR (%s): %s %s)</p>\n"%(litid,error[0],error[1]))
                 #logging.error("generateSubCollections: %s %s"%error)                  logging.error("generateSubCollections: %s %s"%error)
                 #self.REQUEST.RESPONSE.write("(ERROR (%s): %s %s)\n"%(litid,repr(error[0]),repr(error[1])))                  self.REQUEST.RESPONSE.write("(ERROR (%s): %s %s)\n"%(litid,repr(error[0]),repr(error[1])))
                 errorsTXT+="<p>ERROR: No subcollection of %s (ERROR: %s %s)</p>\n"%(litid,error[0],error[1])                  errorsTXT+="<p>ERROR: No subcollection of %s (ERROR: %s %s)</p>\n"%(litid,error[0],error[1])
                 #errorsTXT+="<p>No subcollection of %s  "%litid+"(ERROR: %s %s)</p>"%error                  errorsTXT+="<p>No subcollection of %s  "%litid+"(ERROR: %s %s)</p>"%error
                                   
         return errorsTXT          return errorsTXT
                           
Line 628  class VLP_collection(ECHO_collection,Acq Line 663  class VLP_collection(ECHO_collection,Acq
             logging.error("getOrCreateFolder wrong filename: %s"%fileName)              logging.error("getOrCreateFolder wrong filename: %s"%fileName)
             return None              return None
                   
                   try:
         restName="%08d"%int(fileName[3:])          restName="%08d"%int(fileName[3:])
           except:
               logging.error("getOrCreateFolder wrong filename: %s"%fileName)
               return None
                   
         fs=(restName[0:2],restName[0:4],restName[0:6])          fs=(restName[0:2],restName[0:4],restName[0:6])
                   
Line 644  class VLP_collection(ECHO_collection,Acq Line 682  class VLP_collection(ECHO_collection,Acq
                           
         return current          return current
                   
     def updateCollection(self,forceUpdate=False,RESPONSE=None):      def changeOrAddResources(self,forceUpdate=False,RESPONSE=None):
         """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""          """changes ord updates all resources found in the file system"""
           
         errorsTXT="<h2>Errors</h2>"          errorsTXT="<h2>Errors</h2>"
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.setHeader('Content-Type','text/html')              RESPONSE.setHeader('Content-Type','text/html')
Line 702  class VLP_collection(ECHO_collection,Acq Line 741  class VLP_collection(ECHO_collection,Acq
                         except:                          except:
                             error=sys.exc_info()[0:2]                              error=sys.exc_info()[0:2]
                             if RESPONSE is not None:                              if RESPONSE is not None:
                                 RESPONSE.write("(ERROR (%s): %s %s) "%(fileName,error[0],error[1]))                                  RESPONSE.write("(ERROR Update(%s): %s %s %s) "%(fileName,error[0],error[1],sys.exc_info()[2]))
                             errorsTXT+="<p>ERROR creating index for %s "%fileName+"(ERROR: %s %s)</p>\n"%error                              errorsTXT+="<p>ERROR creating index for %s "%fileName+"(ERROR: %s %s)</p>\n"%error
                                           
                     # update pageSizeSum for subcollections                      # update pageSizeSum for subcollections
Line 721  class VLP_collection(ECHO_collection,Acq Line 760  class VLP_collection(ECHO_collection,Acq
                     error=sys.exc_info()[0:2]                      error=sys.exc_info()[0:2]
                     logging.error("updateCollection: ERROR in %s (%s %s)"%(fileName,error[0],error[1]))                      logging.error("updateCollection: ERROR in %s (%s %s)"%(fileName,error[0],error[1]))
                     if RESPONSE is not None:                      if RESPONSE is not None:
                         RESPONSE.write("<p>(ERROR (%s): %s %s)</p>\n"%(fileName,error[0],error[1]))                           RESPONSE.write("(ERROR  updateII(%s): %s %s %s) "%(fileName,error[0],error[1],sys.exc_info()[2]))
                     errorsTXT+="<p>File not created:%s  (ERROR: %s %s)</p>\n"%(fileName,error[0],error[1])                      errorsTXT+="<p>File not created:%s  (ERROR: %s %s)</p>\n"%(fileName,error[0],error[1])
           return errorsTXT
        
       def updateCollection(self,forceUpdate=True,RESPONSE=None):
           """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""
                                                           
         # update subcollections              # update subcollections    
           errorsTXT=""   
           errorsTXT+=self.changeOrAddResources(forceUpdate, RESPONSE);
         errorsTXT+=self.generateSubCollections(forceUpdate=forceUpdate,RESPONSE=RESPONSE)          errorsTXT+=self.generateSubCollections(forceUpdate=forceUpdate,RESPONSE=RESPONSE)
         errorsTXT+="\n"          errorsTXT+="\n"
         if RESPONSE is not None:          if RESPONSE is not None:
Line 786  class VLP_resource(ECHO_resource,Cacheab Line 831  class VLP_resource(ECHO_resource,Cacheab
   
     meta_type="VLP_resource"      meta_type="VLP_resource"
   
       def _p_resolveConflict(self,oldstate,savedstate,newstate):
           logging.debug("updateCollection: Have to resolve conflict!")
           return newstate
   
     #vlp_basis="/mpiwg/online/permanent/vlp"      #vlp_basis="/mpiwg/online/permanent/vlp"
   
           
       
     referencetypes=[]      referencetypes=[]
   
     manage_options=ECHO_resource.manage_options+Cacheable.manage_options+(      manage_options=ECHO_resource.manage_options+Cacheable.manage_options+(
Line 798  class VLP_resource(ECHO_resource,Cacheab Line 848  class VLP_resource(ECHO_resource,Cacheab
         {'label':'Generate Library Template','action':'generateLibraryTemplateHTML'},          {'label':'Generate Library Template','action':'generateLibraryTemplateHTML'},
         )          )
   
       def getMetaDataLink(self):
           """link auf die metatdaten"""
           return self.absolute_url()+"/index_meta"
   
   
       def getTitle(self):
           """Title der Ressource"""
           title= self.ZSQLSimpleSearch("""select title from vl_literature where reference= \'%s\'  """ %self.getId())[0].title
           logging.debug(title)
           return title
       
    
   
     def getImagePath(self):      def getImagePath(self):
             """Pfad zu den Images"""              """Pfad zu den Images"""
               path=None
                           
             if os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg')):              if os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg')):
                     return os.path.join(self.vlp_basis,self.resourceID,'pageimg')                      path= os.path.join(self.vlp_basis,self.resourceID,'pageimg')
             elif os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pages')):              elif os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pages')):
                     return os.path.join(self.vlp_basis,self.resourceID,'pages')                      path = os.path.join(self.vlp_basis,self.resourceID,'pages')
               # workaround in some cases there seem to be no pictures in pages
               
               if os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi')):
   
           
           pagesHi = os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi'))
           if path is None:
               return os.path.join(self.vlp_basis,self.resourceID,'pagesHi')
   
               pages = os.listdir(path)
   
                   if len (pagesHi) > len(pages):
   
               countHi=0
               for p in pagesHi:
               dat,ext = os.path.splitext(p)
               if ext.lower() in [".tiff",".tif",".jpg"]:
                   countHi+=1
               count=0
               for p in pages:
               dat,ext = os.path.splitext(p)
               if ext.lower() in [".tiff",".tif",".jpg"]:
                   count+=1
               
               if countHi > count:
                           path=os.path.join(self.vlp_basis,self.resourceID,'pagesHi')
               
                           logging.error("pages < pagesHi:  %s"%self.resourceID)
               if path is None:
   
               
                   if len (os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi'))) > len(os.listdir(path)):
                       
                       
                       
                       path=os.path.join(self.vlp_basis,self.resourceID,'pagesHi')
                       logging.error("pages < pagesHi:  %s"%self.resourceID)
             else:              else:
                     return "<error>no images </error>"  
           
                       logging.error("no images:  %s"%self.resourceID)
                       return None   
   
           return path 
   
                           
     def transcription(self):      def transcription(self):
Line 869  class VLP_resource(ECHO_resource,Cacheab Line 972  class VLP_resource(ECHO_resource,Cacheab
   
                     ret+="</text>"                      ret+="</text>"
                     re2=ret[0:]                      re2=ret[0:]
                     re3=re2.decode('latin-1').encode('utf-8')                      re3=self.unicodify(re2)
                     #re3=re2                      #re3=re2
                     ft=self.ZopeFind(self,obj_metatypes=['ECHO_fullText'])                      ft=self.ZopeFind(self,obj_metatypes=['ECHO_fullText'])
                                           
Line 890  class VLP_resource(ECHO_resource,Cacheab Line 993  class VLP_resource(ECHO_resource,Cacheab
             else:              else:
                     return "no: %s"%self.getId()                      return "no: %s"%self.getId()
                           
       def hasTranscription(self):
           """transcription"""
          
           if not hasattr(self,'fulltext'):
               self.copyTranscriptionFromDB()
           if not hasattr(self,'fulltext'): #still not
               return False
           
           return True 
               
     def resetMetaLink(self,all="no",RESPONSE=None):      def resetMetaLink(self,all="no",RESPONSE=None):
         """resets metalink to standard resp. in case of server change it sets to the new server url"""          """resets metalink to standard resp. in case of server change it sets to the new server url"""
         if all=="yes":          if all=="yes":
Line 1035  class VLP_resource(ECHO_resource,Cacheab Line 1148  class VLP_resource(ECHO_resource,Cacheab
             ret="%s: %s"%(str[0],name)              ret="%s: %s"%(str[0],name)
             return ret              return ret
   
         try:          self.imagePathFull=self.getImagePath();
             ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg'))      self.imagePath=self.imagePathFull.split("/")[-1]
             self.imagePath='pageimg'          if (self.imagePath is None):
         except:              return None
             ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pages'))          
             self.imagePath='pages'  
         temp=[]          temp=[]
           ret = os.listdir(self.imagePathFull)
           
         ret.sort()          ret.sort()
         for x in ret:          for x in ret:
             if (not (x[0] in ('.',':'))) and (not x[0:4] in excludeNames):              if (not (x[0] in ('.',':'))) and (not x[0:4] in excludeNames):
Line 1160  class VLP_resource(ECHO_resource,Cacheab Line 1274  class VLP_resource(ECHO_resource,Cacheab
             zt=getattr(self,'index.xml')              zt=getattr(self,'index.xml')
             if not forceUpdate:              if not forceUpdate:
                 # check if directory is newer (self.imagePath sould be set by now)                  # check if directory is newer (self.imagePath sould be set by now)
                 imgdir = os.path.join(self.vlp_basis, self.resourceID, self.imagePath)                  path = self.getImagePath()
                   if (path is None):
                       return "CREATE INDEX FILE NOT POSSIBLE"
                   imgdir = os.path.join(path)
                 dirtime = os.path.getmtime(imgdir)                  dirtime = os.path.getmtime(imgdir)
                 zttime = zt.bobobase_modification_time()                  zttime = zt.bobobase_modification_time()
                 logging.debug("createindexfile: dir %s of %s index of %s"%(imgdir,dirtime,zttime))                  logging.debug("createindexfile: dir %s of %s index of %s"%(imgdir,dirtime,zttime))

Removed from v.1.81  
changed lines
  Added in v.1.94


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