Diff for /documentViewer/documentViewer.py between versions 1.19 and 1.26

version 1.19, 2006/09/11 14:43:09 version 1.26, 2007/05/04 13:17:02
Line 17  import os.path Line 17  import os.path
 import sys  import sys
 import cgi  import cgi
 import urllib  import urllib
 import zLOG  import logging
   
 import urlparse   import urlparse 
   
   def logger(txt,method,txt2):
       """logging"""
       logging.info(txt+ txt2)
       
       
 def getInt(number, default=0):  def getInt(number, default=0):
     """returns always an int (0 in case of problems)"""      """returns always an int (0 in case of problems)"""
     try:      try:
Line 59  def urlopen(url,timeout=2): Line 65  def urlopen(url,timeout=2):
 ##  ##
 class documentViewer(Folder):  class documentViewer(Folder):
     """document viewer"""      """document viewer"""
     textViewerUrl="http://127.0.0.1:8080/HFQP/testXSLT/getPage?"      #textViewerUrl="http://127.0.0.1:8080/HFQP/testXSLT/getPage?"
           
     meta_type="Document viewer"      meta_type="Document viewer"
           
Line 74  class documentViewer(Folder): Line 80  class documentViewer(Folder):
     image_main = PageTemplateFile('zpt/image_main', globals())      image_main = PageTemplateFile('zpt/image_main', globals())
     head_main = PageTemplateFile('zpt/head_main', globals())      head_main = PageTemplateFile('zpt/head_main', globals())
     docuviewer_css = PageTemplateFile('css/docuviewer.css', globals())      docuviewer_css = PageTemplateFile('css/docuviewer.css', globals())
       info_xml = PageTemplateFile('zpt/info_xml', globals())
   
     security.declareProtected('View management screens','changeDocumentViewerForm')          security.declareProtected('View management screens','changeDocumentViewerForm')    
     changeDocumentViewerForm = PageTemplateFile('zpt/changeDocumentViewer', globals())      changeDocumentViewerForm = PageTemplateFile('zpt/changeDocumentViewer', globals())
Line 99  class documentViewer(Folder): Line 106  class documentViewer(Folder):
   
   
     security.declareProtected('View','index_html')      security.declareProtected('View','index_html')
     def index_html(self,mode,url,viewMode="images",start=None,pn=1):      def index_html(self,mode,url,viewMode="auto",start=None,pn=1):
         '''          '''
         view it          view it
         @param mode: defines which type of document is behind url          @param mode: defines how to access the document behind url 
         @param url: url which contains display information          @param url: url which contains display information
         @param viewMode: if images display images, if text display text, default is images          @param viewMode: if images display images, if text display text, default is images (text,images or auto)
                   
         '''          '''
                   
         zLOG.LOG("documentViewer (index)", zLOG.INFO, "mode: %s url:%s start:%s pn:%s"%(mode,url,start,pn))          logger("documentViewer (index)", logging.INFO, "mode: %s url:%s start:%s pn:%s"%(mode,url,start,pn))
                   
         if not hasattr(self, 'template'):          if not hasattr(self, 'template'):
             # create template folder if it doesn't exist              # create template folder if it doesn't exist
Line 120  class documentViewer(Folder): Line 127  class documentViewer(Folder):
         docinfo = self.getDocinfo(mode=mode,url=url)          docinfo = self.getDocinfo(mode=mode,url=url)
         pageinfo = self.getPageinfo(start=start,current=pn,docinfo=docinfo)          pageinfo = self.getPageinfo(start=start,current=pn,docinfo=docinfo)
         pt = getattr(self.template, 'viewer_main')          pt = getattr(self.template, 'viewer_main')
           
           if viewMode=="auto": # automodus gewaehlt
               if docinfo.get("textURL",'') and self.textViewerUrl: #texturl gesetzt und textViewer konfiguriert
                   viewMode="text"
               else:
                   viewMode="images"
                  
         return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode)          return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode)
       
       
Line 139  class documentViewer(Folder): Line 153  class documentViewer(Folder):
         return url          return url
   
           
       def getInfo_xml(self,url,mode):
           """returns info about the document as XML"""
   
           if not self.digilibBaseUrl:
               self.digilibBaseUrl = self.findDigilibUrl() or "http://nausikaa.mpiwg-berlin.mpg.de/digitallibrary"
           
           docinfo = self.getDocinfo(mode=mode,url=url)
           pt = getattr(self.template, 'info_xml')
           return pt(docinfo=docinfo)
   
       
     def getStyle(self, idx, selected, style=""):      def getStyle(self, idx, selected, style=""):
         """returns a string with the given style and append 'sel' if path == selected."""          """returns a string with the given style and append 'sel' if path == selected."""
         #zLOG.LOG("documentViewer (getstyle)", zLOG.INFO, "idx: %s selected: %s style: %s"%(idx,selected,style))          #logger("documentViewer (getstyle)", logging.INFO, "idx: %s selected: %s style: %s"%(idx,selected,style))
         if idx == selected:          if idx == selected:
             return style + 'sel'              return style + 'sel'
         else:          else:
Line 151  class documentViewer(Folder): Line 176  class documentViewer(Folder):
     def isAccessible(self, docinfo):      def isAccessible(self, docinfo):
         """returns if access to the resource is granted"""          """returns if access to the resource is granted"""
         access = docinfo.get('accessType', None)          access = docinfo.get('accessType', None)
         zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "access type %s"%access)          logger("documentViewer (accessOK)", logging.INFO, "access type %s"%access)
         if access is not None and access == 'free':          if access is not None and access == 'free':
             zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "access is free")              logger("documentViewer (accessOK)", logging.INFO, "access is free")
             return True              return True
         elif access is None or access in self.authgroups:          elif access is None or access in self.authgroups:
             # only local access -- only logged in users              # only local access -- only logged in users
Line 164  class documentViewer(Folder): Line 189  class documentViewer(Folder):
             else:              else:
                 return False                  return False
                   
         zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "unknown access type %s"%access)          logger("documentViewer (accessOK)", logging.INFO, "unknown access type %s"%access)
         return False          return False
           
                                   
Line 176  class documentViewer(Folder): Line 201  class documentViewer(Folder):
                           
         infoUrl=self.digilibBaseUrl+"/dirInfo-xml.jsp?mo=dir&fn="+path          infoUrl=self.digilibBaseUrl+"/dirInfo-xml.jsp?mo=dir&fn="+path
           
         zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo from %s"%(infoUrl))          logger("documentViewer (getparamfromdigilib)", logging.INFO, "dirInfo from %s"%(infoUrl))
                   
         for cnt in range(num_retries):          for cnt in range(num_retries):
             try:              try:
Line 185  class documentViewer(Folder): Line 210  class documentViewer(Folder):
                 dom = Parse(txt)                  dom = Parse(txt)
                 break                  break
             except:              except:
                 zLOG.LOG("documentViewer (getdirinfofromdigilib)", zLOG.ERROR, "error reading %s (try %d)"%(infoUrl,cnt))                  logger("documentViewer (getdirinfofromdigilib)", logging.ERROR, "error reading %s (try %d)"%(infoUrl,cnt))
         else:          else:
             raise IOError("Unable to get dir-info from %s"%(infoUrl))              raise IOError("Unable to get dir-info from %s"%(infoUrl))
                   
         sizes=dom.xpath("//dir/size")          sizes=dom.xpath("//dir/size")
         zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo:size"%sizes)          logger("documentViewer (getparamfromdigilib)", logging.INFO, "dirInfo:size"%sizes)
                   
         if sizes:          if sizes:
             docinfo['numPages'] = int(getTextFromNode(sizes[0]))              docinfo['numPages'] = int(getTextFromNode(sizes[0]))
Line 223  class documentViewer(Folder): Line 248  class documentViewer(Folder):
                 dom = Parse(txt)                  dom = Parse(txt)
                 break                  break
             except:              except:
                 zLOG.LOG("ERROR documentViewer (getIndexMata)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])                  logger("ERROR documentViewer (getIndexMata)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2])
                                   
         if dom is None:          if dom is None:
             raise IOError("Unable to read index meta from %s"%(url))              raise IOError("Unable to read index meta from %s"%(url))
                                     
         return dom          return dom
                                                   
       def getPresentationInfoXML(self, url):
           """returns dom of info.xml document at url"""
           num_retries = 3
           dom = None
           metaUrl = None
           if url.startswith("http://"):
               # real URL
               metaUrl = url
           else:
               # online path
               server=self.digilibBaseUrl+"/servlet/Texter?fn="
               metaUrl=server+url.replace("/mpiwg/online","")
              
           
           for cnt in range(num_retries):
               try:
                   # patch dirk encoding fehler treten dann nicht mehr auf
                   # dom = NonvalidatingReader.parseUri(metaUrl)
                   txt=urllib.urlopen(metaUrl).read()
                   dom = Parse(txt)
                   break
               except:
                   logger("ERROR documentViewer (getPresentationInfoXML)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2])
                   
           if dom is None:
               raise IOError("Unable to read infoXMLfrom %s"%(url))
                    
           return dom
                           
                   
     def getAuthinfoFromIndexMeta(self,path,docinfo=None,dom=None):      def getAuthinfoFromIndexMeta(self,path,docinfo=None,dom=None):
         """gets authorization info from the index.meta file at path or given by dom"""          """gets authorization info from the index.meta file at path or given by dom"""
         zLOG.LOG("documentViewer (getauthinfofromindexmeta)", zLOG.INFO,"path: %s"%(path))          logger("documentViewer (getauthinfofromindexmeta)", logging.INFO,"path: %s"%(path))
                   
         access = None          access = None
                   
Line 255  class documentViewer(Folder): Line 309  class documentViewer(Folder):
                   
     def getBibinfoFromIndexMeta(self,path,docinfo=None,dom=None):      def getBibinfoFromIndexMeta(self,path,docinfo=None,dom=None):
         """gets bibliographical info from the index.meta file at path or given by dom"""          """gets bibliographical info from the index.meta file at path or given by dom"""
         zLOG.LOG("documentViewer (getbibinfofromindexmeta)", zLOG.INFO,"path: %s"%(path))          logger("documentViewer (getbibinfofromindexmeta)", logging.INFO,"path: %s"%(path))
                   
         if docinfo is None:          if docinfo is None:
             docinfo = {}              docinfo = {}
Line 278  class documentViewer(Folder): Line 332  class documentViewer(Folder):
             docinfo['title']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['title'][0])[0])              docinfo['title']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['title'][0])[0])
             docinfo['year']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['year'][0])[0])              docinfo['year']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['year'][0])[0])
                   
               logging.info("bla")
               try:
                   docinfo['lang']=getTextFromNode(dom.xpath("//bib/lang")[0])
               except:
                   docinfo['lang']=''
         return docinfo          return docinfo
   
                   
     def getDocinfoFromTextTool(self,url,dom=None,docinfo=None):      def getDocinfoFromTextTool(self,url,dom=None,docinfo=None):
        """parse texttool tag in index meta"""         """parse texttool tag in index meta"""
        zLOG.LOG("documentViewer (getdocinfofromtexttool)", zLOG.INFO,"url: %s"%(url))         logger("documentViewer (getdocinfofromtexttool)", logging.INFO,"url: %s"%(url))
        if docinfo is None:         if docinfo is None:
            docinfo = {}             docinfo = {}
                         
          if docinfo.get('lang',None) is None:
              docinfo['lang']='' # default keine Sprache gesetzt
        if dom is None:         if dom is None:
            dom = self.getIndexMeta(url)             dom = self.getIndexMeta(url)
                 
Line 297  class documentViewer(Folder): Line 358  class documentViewer(Folder):
        if archiveNames and (len(archiveNames)>0):         if archiveNames and (len(archiveNames)>0):
            archiveName=getTextFromNode(archiveNames[0])             archiveName=getTextFromNode(archiveNames[0])
        else:         else:
            zLOG.LOG("documentViewer (getdocinfofromtexttool)", zLOG.WARNING,"resource/name missing in: %s"%(url))             logger("documentViewer (getdocinfofromtexttool)", logging.WARNING,"resource/name missing in: %s"%(url))
                 
        archivePaths=dom.xpath("//resource/archive-path")         archivePaths=dom.xpath("//resource/archive-path")
        if archivePaths and (len(archivePaths)>0):         if archivePaths and (len(archivePaths)>0):
Line 309  class documentViewer(Folder): Line 370  class documentViewer(Folder):
                archivePath += "/" + archiveName                 archivePath += "/" + archiveName
        else:         else:
            # try to get archive-path from url             # try to get archive-path from url
            zLOG.LOG("documentViewer (getdocinfofromtexttool)", zLOG.WARNING,"resource/archive-path missing in: %s"%(url))             logger("documentViewer (getdocinfofromtexttool)", logging.WARNING,"resource/archive-path missing in: %s"%(url))
            if (not url.startswith('http')):             if (not url.startswith('http')):
                archivePath = url.replace('index.meta', '')                 archivePath = url.replace('index.meta', '')
                                 
Line 321  class documentViewer(Folder): Line 382  class documentViewer(Folder):
        if imageDirs and (len(imageDirs)>0):         if imageDirs and (len(imageDirs)>0):
            imageDir=getTextFromNode(imageDirs[0])             imageDir=getTextFromNode(imageDirs[0])
        else:         else:
            # we balk with no image tag             # we balk with no image tag / not necessary anymore because textmode is now standard
            raise IOError("No text-tool info in %s"%(url))             #raise IOError("No text-tool info in %s"%(url))
              imageDir=""
              docinfo['numPages']=1 # im moment einfach auf eins setzen, navigation ueber die thumbs geht natuerlich nicht
          
              docinfo['imagePath'] = "" # keine Bilder
              docinfo['imageURL'] = ""
                         
        if imageDir and archivePath:         if imageDir and archivePath:
            #print "image: ", imageDir, " archivepath: ", archivePath             #print "image: ", imageDir, " archivepath: ", archivePath
Line 345  class documentViewer(Folder): Line 411  class documentViewer(Folder):
   
            docinfo['textURL'] = textUrl             docinfo['textURL'] = textUrl
                                             
        docinfo = self.getBibinfoFromIndexMeta(url,docinfo=docinfo,dom=dom)         presentationUrls=dom.xpath("//texttool/presentation")
        docinfo = self.getAuthinfoFromIndexMeta(url,docinfo=docinfo,dom=dom)         docinfo = self.getBibinfoFromIndexMeta(url,docinfo=docinfo,dom=dom)   # get info von bib tag
          
          if presentationUrls and (len(presentationUrls)>0): # ueberschreibe diese durch presentation informationen 
               # presentation url ergiebt sich ersetzen von index.meta in der url der fŸr die Metadaten
               # durch den relativen Pfad auf die presentation infos
              presentationUrl=url.replace('index.meta',getTextFromNode(presentationUrls[0]))
              docinfo = self.getBibinfoFromTextToolPresentation(presentationUrl,docinfo=docinfo,dom=dom)
   
          docinfo = self.getAuthinfoFromIndexMeta(url,docinfo=docinfo,dom=dom)   # get access info
        return docinfo         return docinfo
         
   
       def getBibinfoFromTextToolPresentation(self,url,docinfo=None,dom=None):
           """gets the bibliographical information from the preseantion entry in texttools
           """
           dom=self.getPresentationInfoXML(url)
           docinfo['author']=getTextFromNode(dom.xpath("//author")[0])
           docinfo['title']=getTextFromNode(dom.xpath("//title")[0])
           docinfo['year']=getTextFromNode(dom.xpath("//date")[0])
           return docinfo
       
     def getDocinfoFromImagePath(self,path,docinfo=None):      def getDocinfoFromImagePath(self,path,docinfo=None):
         """path ist the path to the images it assumes that the index.meta file is one level higher."""          """path ist the path to the images it assumes that the index.meta file is one level higher."""
         zLOG.LOG("documentViewer (getdocinfofromimagepath)", zLOG.INFO,"path: %s"%(path))          logger("documentViewer (getdocinfofromimagepath)", logging.INFO,"path: %s"%(path))
         if docinfo is None:          if docinfo is None:
             docinfo = {}              docinfo = {}
         path=path.replace("/mpiwg/online","")          path=path.replace("/mpiwg/online","")
Line 368  class documentViewer(Folder): Line 451  class documentViewer(Folder):
           
     def getDocinfo(self, mode, url):      def getDocinfo(self, mode, url):
         """returns docinfo depending on mode"""          """returns docinfo depending on mode"""
         zLOG.LOG("documentViewer (getdocinfo)", zLOG.INFO,"mode: %s, url: %s"%(mode,url))          logger("documentViewer (getdocinfo)", logging.INFO,"mode: %s, url: %s"%(mode,url))
         # look for cached docinfo in session          # look for cached docinfo in session
         if self.REQUEST.SESSION.has_key('docinfo'):          if self.REQUEST.SESSION.has_key('docinfo'):
             docinfo = self.REQUEST.SESSION['docinfo']              docinfo = self.REQUEST.SESSION['docinfo']
             # check if its still current              # check if its still current
             if docinfo is not None and docinfo.get('mode') == mode and docinfo.get('url') == url:              if docinfo is not None and docinfo.get('mode') == mode and docinfo.get('url') == url:
                 zLOG.LOG("documentViewer (getdocinfo)", zLOG.INFO,"docinfo in session: %s"%docinfo)                  logger("documentViewer (getdocinfo)", logging.INFO,"docinfo in session: %s"%docinfo)
                 return docinfo                  return docinfo
         # new docinfo          # new docinfo
         docinfo = {'mode': mode, 'url': url}          docinfo = {'mode': mode, 'url': url}
Line 383  class documentViewer(Folder): Line 466  class documentViewer(Folder):
         elif mode=="imagepath":          elif mode=="imagepath":
             docinfo = self.getDocinfoFromImagePath(url, docinfo=docinfo)              docinfo = self.getDocinfoFromImagePath(url, docinfo=docinfo)
         else:          else:
             zLOG.LOG("documentViewer (getdocinfo)", zLOG.ERROR,"unknown mode!")              logger("documentViewer (getdocinfo)", logging.ERROR,"unknown mode!")
             raise ValueError("Unknown mode %s"%(mode))              raise ValueError("Unknown mode %s"%(mode))
                                                   
         zLOG.LOG("documentViewer (getdocinfo)", zLOG.INFO,"docinfo: %s"%docinfo)          logger("documentViewer (getdocinfo)", logging.INFO,"docinfo: %s"%docinfo)
         self.REQUEST.SESSION['docinfo'] = docinfo          self.REQUEST.SESSION['docinfo'] = docinfo
         return docinfo          return docinfo
                   
Line 471  class documentViewer(Folder): Line 554  class documentViewer(Folder):
     def findDigilibUrl(self):      def findDigilibUrl(self):
         """try to get the digilib URL from zogilib"""          """try to get the digilib URL from zogilib"""
         url = self.imageViewerUrl[:-1] + "/getScalerUrl"          url = self.imageViewerUrl[:-1] + "/getScalerUrl"
         print urlparse.urlparse(url)[0]          #print urlparse.urlparse(url)[0]
         print urlparse.urljoin(self.absolute_url(),url)          #print urlparse.urljoin(self.absolute_url(),url)
           logging.info("finddigiliburl: %s"%urlparse.urlparse(url)[0])
           logging.info("finddigiliburl: %s"%urlparse.urljoin(self.absolute_url(),url))
           
         try:          try:
             if urlparse.urlparse(url)[0]=='': #relative path              if urlparse.urlparse(url)[0]=='': #relative path
                 url=urlparse.urljoin(self.absolute_url()+"/",url)                  url=urlparse.urljoin(self.absolute_url()+"/",url)
Line 532  def manage_addDocumentViewerTemplate(sel Line 618  def manage_addDocumentViewerTemplate(sel
   
     self._setObject(id, DocumentViewerTemplate(id))      self._setObject(id, DocumentViewerTemplate(id))
     ob = getattr(self, id)      ob = getattr(self, id)
     ob.pt_edit(open(os.path.join(package_home(globals()),'zpt/viewer_main.zpt')).read(),None)      txt=file(os.path.join(package_home(globals()),'zpt/viewer_main.zpt'),'r').read()
       logging.info("txt %s:"%txt)
       ob.pt_edit(txt,"text/html")
     if title:      if title:
         ob.pt_setTitle(title)          ob.pt_setTitle(title)
     try:      try:

Removed from v.1.19  
changed lines
  Added in v.1.26


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