Diff for /documentViewer/documentViewer.py between versions 1.10.2.1 and 1.18

version 1.10.2.1, 2006/06/13 14:57:46 version 1.18, 2006/09/09 10:52:59
Line 1 Line 1
   
   
 from OFS.Folder import Folder  from OFS.Folder import Folder
 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate  from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile  from Products.PageTemplates.PageTemplateFile import PageTemplateFile
Line 7  from Globals import package_home Line 9  from Globals import package_home
   
 from Ft.Xml.Domlette import NonvalidatingReader  from Ft.Xml.Domlette import NonvalidatingReader
 from Ft.Xml.Domlette import PrettyPrint, Print  from Ft.Xml.Domlette import PrettyPrint, Print
 from Ft.Xml import EMPTY_NAMESPACE  from Ft.Xml import EMPTY_NAMESPACE, Parse
   
 import Ft.Xml.XPath  import Ft.Xml.XPath
   
Line 16  import sys Line 18  import sys
 import cgi  import cgi
 import urllib  import urllib
 import zLOG  import zLOG
   import urlparse 
   
 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)"""
Line 25  def getInt(number, default=0): Line 28  def getInt(number, default=0):
         return default          return default
   
 def getTextFromNode(nodename):  def getTextFromNode(nodename):
       """get the cdata content of a node"""
     if nodename is None:      if nodename is None:
         return ""          return ""
     nodelist=nodename.childNodes      nodelist=nodename.childNodes
Line 55  def urlopen(url,timeout=2): Line 59  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?"
   
     meta_type="Document viewer"      meta_type="Document viewer"
           
Line 74  class documentViewer(Folder): Line 79  class documentViewer(Folder):
     changeDocumentViewerForm = PageTemplateFile('zpt/changeDocumentViewer', globals())      changeDocumentViewerForm = PageTemplateFile('zpt/changeDocumentViewer', globals())
   
           
     def __init__(self,id,imageViewerUrl,title="",digilibBaseUrl=None,thumbcols=2,thumbrows=10,authgroups="mpiwg"):      def __init__(self,id,imageViewerUrl,textViewerUrl=None,title="",digilibBaseUrl=None,thumbcols=2,thumbrows=10,authgroups="mpiwg"):
         """init document viewer"""          """init document viewer"""
         self.id=id          self.id=id
         self.title=title          self.title=title
         self.imageViewerUrl=imageViewerUrl          self.imageViewerUrl=imageViewerUrl
           self.textViewerUrl=textViewerUrl
           
         if not digilibBaseUrl:          if not digilibBaseUrl:
             self.digilibBaseUrl = self.findDigilibUrl()              self.digilibBaseUrl = self.findDigilibUrl()
         else:          else:
Line 92  class documentViewer(Folder): Line 99  class documentViewer(Folder):
   
   
     security.declareProtected('View','index_html')      security.declareProtected('View','index_html')
     def index_html(self,mode,url,start=None,pn=1):      def index_html(self,mode,url,viewMode="images",start=None,pn=1):
         '''          '''
         view it          view it
         @param mode: defines which type of document is behind url          @param mode: defines which type of document is 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
           
         '''          '''
                   
         zLOG.LOG("documentViewer (index)", zLOG.INFO, "mode: %s url:%s start:%s pn:%s"%(mode,url,start,pn))          zLOG.LOG("documentViewer (index)", zLOG.INFO, "mode: %s url:%s start:%s pn:%s"%(mode,url,start,pn))
Line 111  class documentViewer(Folder): Line 120  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')
         return pt(docinfo=docinfo,pageinfo=pageinfo)          return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode)
       
       
     def getLink(self,param=None,val=None):      def getLink(self,param=None,val=None):
Line 142  class documentViewer(Folder): Line 151  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)
         if access is None:          zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "access type %s"%access)
             # no information - no access           if access is not None and access == 'free':
             #TODO: check              zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "access is free")
             return True              return True
         elif access == 'free':          elif access is None or access in self.authgroups:
             return True  
         elif access in self.authgroups:  
             # only local access -- only logged in users              # only local access -- only logged in users
             user = getSecurityManager().getUser()              user = getSecurityManager().getUser()
             if user is not None:              if user is not None:
Line 163  class documentViewer(Folder): Line 170  class documentViewer(Folder):
                                   
     def getDirinfoFromDigilib(self,path,docinfo=None):      def getDirinfoFromDigilib(self,path,docinfo=None):
         """gibt param von dlInfo aus"""          """gibt param von dlInfo aus"""
           num_retries = 3
         if docinfo is None:          if docinfo is None:
             docinfo = {}              docinfo = {}
                           
         imageUrl=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"%(imageUrl))          zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo from %s"%(infoUrl))
                   
         for cnt in (1,2,3):          for cnt in range(num_retries):
             try:              try:
                 dom = NonvalidatingReader.parseUri(imageUrl)                  # dom = NonvalidatingReader.parseUri(imageUrl)
                   txt=urllib.urlopen(infoUrl).read()
                   dom = Parse(txt)
                 break                  break
             except:              except:
                 zLOG.LOG("documentViewer (getdirinfofromdigilib)", zLOG.ERROR, "error reading %s (try %d)"%(imageUrl,cnt))                  zLOG.LOG("documentViewer (getdirinfofromdigilib)", zLOG.ERROR, "error reading %s (try %d)"%(infoUrl,cnt))
         else:          else:
             raise IOError("Unable to get dir-info from %s"%(imageUrl))              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)          zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo:size"%sizes)
Line 198  class documentViewer(Folder): Line 208  class documentViewer(Folder):
         if url.startswith("http://"):          if url.startswith("http://"):
             # real URL              # real URL
             metaUrl = url              metaUrl = url
             try:  
                 dom = NonvalidatingReader.parseUri(url)  
             except:  
                 zLOG.LOG("documentViewer (getIndexMata)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])  
                 raise IOError("Unable to read index.meta from %s"%(url))  
         else:          else:
             # online path              # online path
             server=self.digilibBaseUrl+"/servlet/Texter?fn="              server=self.digilibBaseUrl+"/servlet/Texter?fn="
             metaUrl=server+url              metaUrl=server+url.replace("/mpiwg/online","")
             if not metaUrl.endswith("index.meta"):              if not metaUrl.endswith("index.meta"):
                 metaUrl += "/index.meta"                  metaUrl += "/index.meta"
                   print metaUrl
         for n in range(num_retries):          for cnt in range(num_retries):
             try:              try:
                 dom = NonvalidatingReader.parseUri(metaUrl)                  # patch dirk encoding fehler treten dann nicht mehr auf
                 zLOG.LOG("documentViewer (getIndexMata)", zLOG.INFO,metaUrl)                  # dom = NonvalidatingReader.parseUri(metaUrl)
                   txt=urllib.urlopen(metaUrl).read()
                   dom = Parse(txt)
                 break                  break
             except:              except:
                 zLOG.LOG("ERROR documentViewer (getIndexMata)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])                  zLOG.LOG("ERROR documentViewer (getIndexMata)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])
Line 283  class documentViewer(Folder): Line 290  class documentViewer(Folder):
        if dom is None:         if dom is None:
            dom = self.getIndexMeta(url)             dom = self.getIndexMeta(url)
                 
          archivePath = None
          archiveName = None
   
        archiveNames=dom.xpath("//resource/name")         archiveNames=dom.xpath("//resource/name")
        if archiveNames and (len(archiveNames)>0):         if archiveNames and (len(archiveNames)>0):
            archiveName=getTextFromNode(archiveNames[0])             archiveName=getTextFromNode(archiveNames[0])
          else:
              zLOG.LOG("documentViewer (getdocinfofromtexttool)", zLOG.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 293  class documentViewer(Folder): Line 305  class documentViewer(Folder):
            # clean up archive path             # clean up archive path
            if archivePath[0] != '/':             if archivePath[0] != '/':
                archivePath = '/' + archivePath                 archivePath = '/' + archivePath
            if not archivePath.endswith(archiveName):             if archiveName and (not archivePath.endswith(archiveName)):
                archivePath += "/" + archiveName                 archivePath += "/" + archiveName
        else:         else:
            archivePath=None             # try to get archive-path from url
              zLOG.LOG("documentViewer (getdocinfofromtexttool)", zLOG.WARNING,"resource/archive-path missing in: %s"%(url))
              if (not url.startswith('http')):
                  archivePath = url.replace('index.meta', '')
                  
          if archivePath is None:
              # we balk without archive-path
              raise IOError("Missing archive-path (for text-tool) in %s"%(url))
                 
        imageDirs=dom.xpath("//texttool/image")         imageDirs=dom.xpath("//texttool/image")
        if imageDirs and (len(imageDirs)>0):         if imageDirs and (len(imageDirs)>0):
Line 449  class documentViewer(Folder): Line 468  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.urljoin(self.absolute_url(),url)
         try:          try:
               if urlparse.urlparse(url)[0]=='': #relative path
                   url=urlparse.urljoin(self.absolute_url()+"/",url)
                   
             scaler = urlopen(url).read()              scaler = urlopen(url).read()
             return scaler.replace("/servlet/Scaler?", "")              return scaler.replace("/servlet/Scaler?", "")
         except:          except:
             return None              return None
           
     def changeDocumentViewer(self,imageViewerUrl,title="",digilibBaseUrl=None,thumbrows=2,thumbcols=10,authgroups='mpiwg',RESPONSE=None):      def changeDocumentViewer(self,imageViewerUrl,textViewerUrl,title="",digilibBaseUrl=None,thumbrows=2,thumbcols=10,authgroups='mpiwg',RESPONSE=None):
         """init document viewer"""          """init document viewer"""
         self.title=title          self.title=title
         self.imageViewerUrl=imageViewerUrl          self.imageViewerUrl=imageViewerUrl
           self.textViewerUrl=textViewerUrl
         self.digilibBaseUrl = digilibBaseUrl          self.digilibBaseUrl = digilibBaseUrl
         self.thumbrows = thumbrows          self.thumbrows = thumbrows
         self.thumbcols = thumbcols          self.thumbcols = thumbcols
Line 476  def manage_AddDocumentViewerForm(self): Line 501  def manage_AddDocumentViewerForm(self):
     pt=PageTemplateFile('zpt/addDocumentViewer', globals()).__of__(self)      pt=PageTemplateFile('zpt/addDocumentViewer', globals()).__of__(self)
     return pt()      return pt()
       
 def manage_AddDocumentViewer(self,id,imageViewerUrl="",title="",RESPONSE=None):  def manage_AddDocumentViewer(self,id,imageViewerUrl="",textViewerUrl="",title="",RESPONSE=None):
     """add the viewer"""      """add the viewer"""
     newObj=documentViewer(id,imageViewerUrl,title)      newObj=documentViewer(id,imageViewerUrl,title=title,textViewerUrl=textViewerUrl)
     self._setObject(id,newObj)      self._setObject(id,newObj)
           
     if RESPONSE is not None:      if RESPONSE is not None:

Removed from v.1.10.2.1  
changed lines
  Added in v.1.18


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