Diff for /ImageArchive/ImageArchive.py between versions 1.91 and 1.108

version 1.91, 2006/05/22 20:20:17 version 1.108, 2010/06/15 14:08:12
Line 1 Line 1
   """version 1 des Imageservers, wird ersetzt durch version2"""
   
 genericServerPath="http://www.mpiwg-berlin.mpg.de/zogilib_images" #can be changed with main config  genericServerPath="http://www.mpiwg-berlin.mpg.de/zogilib_images" #can be changed with main config
   
   
Line 24  from threading import Thread Line 26  from threading import Thread
 import Queue  import Queue
 import cgi  import cgi
 import sys  import sys
 import zLOG  
   import shutil
   
   import logging
   
   #ersetzt logging
   def logger(txt,method,txt2):
       """logging"""
       logging.info(txt+ txt2)
   
   def logTime(msg=""):
       """log the time"""
       logging.info("%s %s"%(msg,time.clock()))
   
   
 from AccessControl import ClassSecurityInfo, getSecurityManager  from AccessControl import ClassSecurityInfo, getSecurityManager
Line 49  except: Line 63  except:
   
         manage_options=()          manage_options=()
   
   tdir="tmp"
 tdir = "/mpiwg/temp/tmp/archivesImageServer/"  #tdir = "/mpiwg/temp/tmp/archivesImageServer/"
 #tdir="/tmp/archivesImageServer/"  #tdir="/tmp/archivesImageServer/"
   
 imageExtensions=['jpg','jpeg','tif','tiff','png']  imageExtensions=['.jpg','.jpeg','.tif','.tiff','.png','.gif']
   
 def splitPath(str):  def splitPath(str):
         str2=str.replace("\\","/")          str2=str.replace("\\","/")
Line 80  class generateSet: Line 94  class generateSet:
     """generateSetThread"""      """generateSetThread"""
   
                   
     def __init__(self,filenames,filenamesIds,ImageViewerPath,ids,url,local=None,version="working"):      def __init__(self,filenames,filenamesIds,ImageViewerPath,ImageStoragePath,destBasis,ids,url,local=None,version="working"):
         """init generateSet"""          """init generateSet"""
         self.filenames=filenames          self.filenames=filenames
         self.filenamesIds=filenamesIds          self.filenamesIds=filenamesIds
         self.ImageViewerPath=ImageViewerPath          self.ImageViewerPath=ImageViewerPath
           self.ImageStoragePath=ImageStoragePath
           self.destBasis=destBasis
         self.ids=ids          self.ids=ids
         self.local=local          self.local=local
         self.url=url          self.url=url
         self.version=version          self.version=version
         self.done=None          self.done=None
           self.response=""
                   
   
     def __call__(self):      def __call__(self):
Line 115  class generateSet: Line 132  class generateSet:
   
         for id in self.filenames:          for id in self.filenames:
   
                     if self.filenamesIds.has_key(id[0]):                      if self.filenamesIds.has_key(id[0]) and self.filenamesIds[id[0]][0]:
                             filename=self.filenamesIds[id[0]][0]+"_"+id[0]                              filename=self.filenamesIds[id[0]][0]+"_"+id[0]
                     else:                      else:
                             filename=id[0]                              filename=id[0]
   
                     self.response+=str("<p>Get File: %s<br>\n"%filename)                      self.response+=str("<p>Get File: %s<br>\n"%filename)
   
                       toggle=False
   
                     if self.local:                      if self.local:
                                                           
                             if self.version=="working":                              if self.version=="working":
   
                                     sourcePath="/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+os.path.splitext(id[0])[0]+".jpg"                                      sourcePath=self.destBasis+"/"+self.ImageViewerPath+"/"+os.path.splitext(id[0])[0]+".jpg"
                             else:                                      if not os.path.exists(sourcePath):
                                     sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+id[0]                                              self.response+=str("<p>%s doesn't exist I'll try the non scaled image</p>"%sourcePath)
                                               toggle=True
                               if (self.version!="working") or toggle:
                                       toggle=False
                                       sourcePath=self.ImageStoragePath+"/"+id[0]
                                       if not os.path.exists(sourcePath):
                                           sourcePath=self.ImageStoragePath+"/"+os.path.splitext(id[0])[0]+".jpg"
                                                         
                             targetPath=tmpPath+"/"+filename                              targetPath=tmpPath+"/"+filename
                             try:                              try:
                                 shutil.copyfile(sourcePath,targetPath)                                  shutil.copyfile(sourcePath,targetPath)
                             except:                              except:
                                 self.response+=(str("<p>Error in File: %s (possible missing)<br>\n"%filename))                                  self.response+=(str("<p>Error in File: %s (possible missing)<br>\n"%sourcePath))
                     else:                      else:
                             if self.version=="working":                              if self.version=="working":
                                     requestString=self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&dh=2000&dw=2000"                                      requestString=self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&dh=2000&dw=2000"
Line 283  class ImageDigilib(Folder,Persistent,Imp Line 308  class ImageDigilib(Folder,Persistent,Imp
     manage_options = Folder.manage_options+(      manage_options = Folder.manage_options+(
                   
         {'label':'Add Metadata','action':'addMetaObjectForm'},          {'label':'Add Metadata','action':'addMetaObjectForm'},
                   {'label':'View Info','action':'editImageDigilib'},
         )          )
   
       def editImageDigilib(self):
           """edit image date"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editImageDigilib.zpt')).__of__(self)
           return pt()        
   
   
                   
     def getAccessRight(self):      def getAccessRight(self):
Line 296  class ImageDigilib(Folder,Persistent,Imp Line 326  class ImageDigilib(Folder,Persistent,Imp
           
     def isAccessible(self):      def isAccessible(self):
         """gives true if obejct is accessible taking the rights of the user into account"""          """gives true if obejct is accessible taking the rights of the user into account"""
                   logTime("isaccessible")
         #TODO: implement rights, currently  true if external and false if internal, and true if user has role authenticated          #TODO: implement rights, currently  true if external and false if internal, and true if user has role authenticated
           
         username=self.REQUEST['AUTHENTICATED_USER']          username=self.REQUEST['AUTHENTICATED_USER']
Line 380  class ImageDigilib(Folder,Persistent,Imp Line 410  class ImageDigilib(Folder,Persistent,Imp
         """upload an Image from an Requast"""          """upload an Image from an Requast"""
         #path_name=self.ImageStoragePath          #path_name=self.ImageStoragePath
         fn = self.filename or splitPath(fileupload.filename)          fn = self.filename or splitPath(fileupload.filename)
           fn = os.path.splitext(fn)[0]+os.path.splitext(fileupload.filename)[1] # Extensions des gespeicherten Files sollte gleich dem hochgeladenen File sein.
         filename=path_name+"/"+fn          filename=path_name+"/"+fn
         filedata=fileupload.read()          filedata=fileupload.read()
         f=open(filename,"w")          f=open(filename,"w")
         f.write(filedata)          f.write(filedata)
         f.close()          f.close()
         self.filename = fn          self.filename = fn
           
         try:          try:
             os.chmod(filename,0664)              os.chmod(filename,0664)
         except:          except:
Line 450  class ImageDigilib(Folder,Persistent,Imp Line 482  class ImageDigilib(Folder,Persistent,Imp
             self.title=newname[0:]              self.title=newname[0:]
             self.filename=newname[0:]                 self.filename=newname[0:]   
             #umbennen des files auf dem server              #umbennen des files auf dem server
             oldpath=os.path.join(self.ImageStoragePath,oldname)              oldpath=os.path.join(self.getImageStoragePath(),oldname)
             newpath=os.path.join(self.ImageStoragePath,newname)              newpath=os.path.join(self.getImageStoragePath(),newname)
             os.rename(oldpath,newpath)              os.rename(oldpath,newpath)
                           
             #umbenennen des versionsfolders              #umbenennen des versionsfolders
             oldfolder=os.path.join(self.ImageStoragePath,"."+oldname+".dir")              oldfolder=os.path.join(self.getImageStoragePath(),"."+oldname+".dir")
             newfolder=os.path.join(self.ImageStoragePath,"."+newname+".dir")              newfolder=os.path.join(self.getImageStoragePath(),"."+newname+".dir")
             if os.path.exists(oldfolder):              if os.path.exists(oldfolder):
                 os.rename(oldfolder,newfolder)                  os.rename(oldfolder,newfolder)
             else:              else:
Line 488  class ImageDigilib(Folder,Persistent,Imp Line 520  class ImageDigilib(Folder,Persistent,Imp
   
             self.scaleWorkingVersions()              self.scaleWorkingVersions()
   
             self.scaleToJpg()              #self.scaleToJpg()
             if RESPONSE:              if RESPONSE:
                     RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)                      RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
                   
Line 497  class ImageDigilib(Folder,Persistent,Imp Line 529  class ImageDigilib(Folder,Persistent,Imp
                   
         #create backup of the original file          #create backup of the original file
                   
         imagePath=os.path.join(self.ImageStoragePath,self.filename)          imagePath=os.path.join(self.getImageStoragePath(),self.filename)
         path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")          path=os.path.join(self.getImageStoragePath(),"."+self.getId()+".dir")
                                   
         if not os.path.exists(path):          if not os.path.exists(path):
             os.mkdir(path,0775)              os.mkdir(path,0775)
             os.chmod(path,0775)              os.chmod(path,0775)
                           
         newName=os.path.join(path,self.getId())          newName=os.path.join(path,self.getId()+str(time.time()))
   
         if os.path.exists(newName):          if os.path.exists(newName):
             zLOG.LOG("ImageArchive:scaleToJpg", zLOG.INFO, "%s already exists"%newName)              logger("ImageArchive:scaleToJpg", logging.INFO, "%s already exists"%newName)
         else:          else:
             try:              try:
                 os.rename(imagePath,newName)                  os.rename(imagePath,newName)
             except:              except:
                 zLOG.LOG("ImageArchive:scaleToJpg", zLOG.ERROR, "%s "%newName)                  logger("ImageArchive:scaleToJpg", logging.ERROR, "%s "%newName)
                 return False                  return False
                           
           ext= os.path.splitext(imagePath)[1].lower()
           if ext.rstrip()==".jpg":
                   shutil.copy(newName,imagePath)
                   print "copy",imagePath
                   return True
   
           
                           
         dest="/Volumes/paviaExtern/docuserver/images/exhibitionImages/"  
         dir=self.getId()          dir=self.getId()
     src=path      src=path
         self.scale(dest=dest,dir=dir,src=path,scaleBy=1,RESPONSE=RESPONSE)          self.scale(dest=self.getImageStoragePath(),dir=dir,src=path,scaleBy=1,RESPONSE=RESPONSE)
         return True          return True
           
     def updateImage(self,_fileupload,_rename=None,RESPONSE=None):      def updateImage(self,_fileupload,_rename=None,RESPONSE=None):
         """lade neues Version des Bildes"""          """lade neues Version des Bildes"""
         #teste ob Dokumenten ordner schon vorhanden          #teste ob Dokumenten ordner schon vorhanden
         #imagePath=os.path.join(self.ImageStoragePath,self.getId())          #imagePath=os.path.join(self.getImageStoragePath(),self.getId())
                   
           logging.error("updateImage:"+self.filename)
         identifyField="filename"          identifyField="filename"
                   
         if _fileupload and _fileupload.filename!="":          if _fileupload and _fileupload.filename!="":
             imagePath=os.path.join(self.ImageStoragePath,self.filename)              imagePath=os.path.join(self.getImageStoragePath(),self.filename)
             path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")              idWithoutSuffix= os.path.splitext(self.getId())[0]
               path=os.path.join(self.getImageStoragePath(),"."+self.getId()+".dir")
                                   
             if not os.path.exists(path):              if not os.path.exists(path):
                 os.mkdir(path,0775)                  os.mkdir(path,0775)
Line 548  class ImageDigilib(Folder,Persistent,Imp Line 587  class ImageDigilib(Folder,Persistent,Imp
             #kopieren der bestehenden Version in den Versions ordner.              #kopieren der bestehenden Version in den Versions ordner.
             imageNewPath=os.path.join(path,"V%i_%s"%(versionNumber,self.filename))              imageNewPath=os.path.join(path,"V%i_%s"%(versionNumber,self.filename))
             try:                  try:    
                 #zLOG.LOG("ImageArchive:updateImage", zLOG.INFO, "rename: %s -> %s"%(imagePath,imageNewPath))                      #logger("ImageArchive:updateImage", logging.INFO, "rename: %s -> %s"%(imagePath,imageNewPath))
                 os.rename(imagePath,imageNewPath)                  os.rename(imagePath,imageNewPath)
             except:              except:
                 zLOG.LOG("ImageArchive:updateImage", zLOG.ERROR, "rename: %s -> %s didn't work!"%(imagePath,imageNewPath))                    logger("ImageArchive:updateImage ", logging.ERROR, "rename: %s -> %s didn't work!"%(imagePath,imageNewPath))      
           
             #lesen des upload files und schreiben              #lesen des upload files und schreiben
             filedata=_fileupload.read()              filedata=_fileupload.read()
             f=open(imagePath,"w") # if we wanted to have filename=id we should do it here!              
               #passe suffix an
               oldNameBase=os.path.splitext(imagePath)[0]
               uploadFileExt=os.path.splitext(_fileupload.filename)[1]
               
               newImagePath=oldNameBase+uploadFileExt
               
               f=open(newImagePath,"w") # if we wanted to have filename=id we should do it here!
               logging.error("saving:"+newImagePath)
             f.write(filedata)              f.write(filedata)
             f.close()              f.close()
             try:              try:
                 os.chmod(imagePath,0664)                  os.chmod(newImagePath,0664)
             except:              except:
                 pass                  pass
             #scale thumb              #scale thumb
Line 569  class ImageDigilib(Folder,Persistent,Imp Line 616  class ImageDigilib(Folder,Persistent,Imp
             #scale standard              #scale standard
           
             self.scaleWorkingVersions()              self.scaleWorkingVersions()
             self.scaleToJpg()              #self.scaleToJpg()
             if _rename:              if _rename:
                 self.renameImage(_fileupload.filename)                  self.renameImage(_fileupload.filename)
                   
               else: 
                   self.filename=os.path.splitext(self.filename)[0]+uploadFileExt # Aendere zumindest die Extensiion
             
           try: #todo: sollte nur aufgerufen werden, wenn eine Datenbank dahinter liegt.
         args=self.REQUEST.form          args=self.REQUEST.form
                 
         args['-identify']=identifyField+"="+args['_identifyField']          args['-identify']=identifyField+"="+args['_identifyField']
                     
         self.ZSQLChange(args=args)          self.ZSQLChange(args=args)
                     
           except:
               pass
           
         if RESPONSE:          if RESPONSE:
             RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)              RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
                   
Line 612  class ImageDigilib(Folder,Persistent,Imp Line 665  class ImageDigilib(Folder,Persistent,Imp
                   
   
           
         self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path          imageString="<img border=\"0\" src=\"%s\">"% path
           self.REQUEST.SESSION['string']=imageString
         if url:          if url:
             return "<img border=\"0\" src=\"%s\">"% path              return "<img border=\"0\" src=\"%s\">"% path
         else:          else:
Line 622  class ImageDigilib(Folder,Persistent,Imp Line 676  class ImageDigilib(Folder,Persistent,Imp
                 return getattr(self,overview[0][0])()                  return getattr(self,overview[0][0])()
             else:              else:
                 pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbMD.zpt')).__of__(self)                  pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbMD.zpt')).__of__(self)
                 return pt()                  return pt(imageString=imageString)
   
   
     def image(self,dw=None,dh=None):      def image(self,dw=None,dh=None):
Line 665  def manage_AddImageDigilib(self,id,fileu Line 719  def manage_AddImageDigilib(self,id,fileu
     newObj=ImageDigilib(id,fn,meta)      newObj=ImageDigilib(id,fn,meta)
           
     self._setObject(id,newObj)      self._setObject(id,newObj)
     getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)      getattr(self,id).uploadImage(fileupload,self.getImageStoragePath())
           
     if RESPONSE is not None:      if RESPONSE is not None:
         RESPONSE.redirect('manage_main')          RESPONSE.redirect('manage_main')
Line 689  class ImageCollection(OrderedFolder, Per Line 743  class ImageCollection(OrderedFolder, Per
   
     leiden_meta_fields=['image_id','date','country','place','people','description','photographer']      leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
   
     scaledBasis="/mpiwg/temp/online/scaled"  
           
     defaultMetaString="http://fm-web.mpiwg-berlin.mpg.de:8050/FMRes/FMPJS?-db=Wissenschaftlerportraits.fp5&-layID=69&-token=25&-max=1&-format=formvwcss.htm&-mode=browse&images::filename=%s&-find" ## TEST FUER IMAGEDATENBANK WP      defaultMetaString="http://fm-web.mpiwg-berlin.mpg.de:8050/FMRes/FMPJS?-db=Wissenschaftlerportraits.fp5&-layID=69&-token=25&-max=1&-format=formvwcss.htm&-mode=browse&images::filename=%s&-find" ## TEST FUER IMAGEDATENBANK WP
   
Line 699  class ImageCollection(OrderedFolder, Per Line 752  class ImageCollection(OrderedFolder, Per
     imgcoll_thumbMD = PageTemplateFile('zpt/thumbMD', globals())          imgcoll_thumbMD = PageTemplateFile('zpt/thumbMD', globals())    
   
     destBasis="/docuserver/scaled/"      destBasis="/docuserver/scaled/"
       scaledBasis=destBasis
     srcBasis="/docuserver/images"      srcBasis="/docuserver/images"
       scaleomatStr="/docuserver/libs/scaleomat/scaleomat.pl"
       
       #dest="/Volumes/paviaExtern/docuserver/images/exhibitionImages/"
       
       def configScaleForm(self):
           """configure the scaler form"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','configScale.zpt')).__of__(self)
           return pt()        
   
       def configScale(self,scaleomatStr,RESPONSE=None):
           """config the scaler"""
           self.scaleomatStr=scaleomatStr
           
               
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
     def scale(self,dest=None,dir=None,src=None,scaleTo=None,scaleBy=None,RESPONSE=None):      def scale(self,dest=None,dir=None,src=None,scaleTo=None,scaleBy=None,RESPONSE=None):
         """scaler"""          """scaler"""
         #scaleomatStr="ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ %s"          #scaleomatStr="ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ %s"
         scaleomatStr="/docuserver/libs/scaleomat/scaleomat.pl"          scaleomatStr=self.scaleomatStr
   
         destBasis=self.destBasis          destBasis=self.destBasis
         srcBasis=self.srcBasis          srcBasis=self.srcBasis
           
           
         if src:          if src:
          srcStr=" -src=%s"%src           srcStr=" -src=%s"%src
         else:          else:
Line 722  class ImageCollection(OrderedFolder, Per Line 795  class ImageCollection(OrderedFolder, Per
             fileStr=" -dir=%s"%fileTmp              fileStr=" -dir=%s"%fileTmp
             scaleStr=scaleStr+fileStr              scaleStr=scaleStr+fileStr
         else:          else:
             zLOG.LOG("ImageCollection:scale",zLOG.ERROR,"no directory or filename given")              logger("ImageCollection:scale",logging.ERROR,"no directory or filename given")
             return False              return False
                   
         if dest is not None:          if dest is not None:
             destStr=" -dest=%s"%os.path.join(destBasis,dest)              destStr=" -dest=%s"%os.path.join(destBasis,dest)
             scaleStr=scaleStr+destStr              scaleStr=scaleStr+destStr
         else:          else:
             zLOG.LOG("ImageCollection:scale",zLOG.ERROR,"no destionation given")              logger("ImageCollection:scale",logging.ERROR,"no destionation given")
             return False              return False
                   
         if scaleTo:          if scaleTo:
Line 739  class ImageCollection(OrderedFolder, Per Line 812  class ImageCollection(OrderedFolder, Per
             scaleByStr=" -scaleby=%s"%scaleBy              scaleByStr=" -scaleby=%s"%scaleBy
             scaleStr=scaleStr+scaleByStr              scaleStr=scaleStr+scaleByStr
         else:          else:
             zLOG.LOG("ImageCollection:scale",zLOG.ERROR,"no destionation given")              logger("ImageCollection:scale",logging.ERROR,"no destionation given")
             return False              return False
             
                 
         #ret=scaleStr          #ret=scaleStr
           logger("ImageCollection:scale",logging.INFO,scaleStr)
         ret=os.popen2(scaleStr,1)[1].read()          ret=os.popen2(scaleStr,1)[1].read()
     
         if RESPONSE:          if RESPONSE:
Line 757  class ImageCollection(OrderedFolder, Per Line 831  class ImageCollection(OrderedFolder, Per
                   
         name=os.path.splitext(name)[0]          name=os.path.splitext(name)[0]
         for extension in imageExtensions:          for extension in imageExtensions:
             nameExt=name+"."+extension              nameExt=name+extension
   
             if hasattr(self,nameExt):              if hasattr(self,nameExt):
                 return getattr(self,nameExt)                  return getattr(self,nameExt)
                           
             nameExt=name+"_."+extension              nameExt=name+"_"+extension
             if hasattr(self,nameExt):              if hasattr(self,nameExt):
                 return getattr(self,nameExt)                  return getattr(self,nameExt)
                   
Line 782  class ImageCollection(OrderedFolder, Per Line 856  class ImageCollection(OrderedFolder, Per
   
     def getImageStoragePath(self):      def getImageStoragePath(self):
         """get ImageStoragePath"""          """get ImageStoragePath"""
         return self.ImageStoragePath          if self.ImageViewerPath[0]=="/":
               if len(self.ImageViewerPath)>1:
                   iv=self.ImageViewerPath[1:]
               else:
                   iv=""
           else:
                   iv=self.ImageViewerPath
   
           return os.path.join(self.srcBasis,iv)
           
     def refreshTxt(self):      def refreshTxt(self):
         """txt fuer refresh"""          """txt fuer refresh"""
Line 796  class ImageCollection(OrderedFolder, Per Line 878  class ImageCollection(OrderedFolder, Per
                   
                                                 
             if not threadName or threadName=="":              if not threadName or threadName=="":
                 threadStart=generateSet(self.REQUEST.SESSION['filenames'],self.REQUEST.SESSION['filenamesIds'],self.ImageViewerPath,self.show_thumbs(),self.absolute_url(),local=local,version=version)                  threadStart=generateSet(self.REQUEST.SESSION['filenames'],self.REQUEST.SESSION['filenamesIds'],self.ImageViewerPath,self.ImageStoragePath,self.destBasis,self.show_thumbs(),self.absolute_url(),local=local,version=version)
                 thread=Thread(target=threadStart)                  thread=Thread(target=threadStart)
                                   
                 thread.start()                  thread.start()
Line 885  class ImageCollection(OrderedFolder, Per Line 967  class ImageCollection(OrderedFolder, Per
                   
         #scale thumbs          #scale thumbs
         dest=os.path.join(self.scaledBasis,'thumb')          dest=os.path.join(self.scaledBasis,'thumb')
         self.scale(dir=self.ImageStoragePath,dest=dest,scaleTo=100,RESPONSE=RESPONSE)          self.scale(dir=self.getImageStoragePath(),dest=dest,scaleTo=100,RESPONSE=RESPONSE)
         #ret=os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ -dir=%s -dest=/mpiwg/temp/online/scaled/thumb -scaleto=100 &"% self.ImageViewerPath)          #ret=os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ -dir=%s -dest=/mpiwg/temp/online/scaled/thumb -scaleto=100 &"% self.ImageViewerPath)
         if RESPONSE:          #if RESPONSE:
                 RESPONSE.write(ret.read())          #        RESPONSE.write(ret.read())
                 RESPONSE.write("\n")          #        RESPONSE.write("\n")
                                   
         return "RESCALING STARTED"          return "RESCALING STARTED"
   
Line 899  class ImageCollection(OrderedFolder, Per Line 981  class ImageCollection(OrderedFolder, Per
         #scale standard          #scale standard
                 
         dest=os.path.join(self.scaledBasis,'small')          dest=os.path.join(self.scaledBasis,'small')
         self.scale(dir=self.ImageStoragePath,dest=dest,scaleTo=1000,RESPONSE=RESPONSE)          self.scale(dir=self.getImageStoragePath(),dest=dest,scaleTo=1000,RESPONSE=RESPONSE)
                   
         dest=os.path.join(self.scaledBasis,'medium')          dest=os.path.join(self.scaledBasis,'medium')
         self.scale(dir=self.ImageStoragePath,dest=dest,scaleTo=2000,RESPONSE=RESPONSE)          self.scale(dir=self.getImageStoragePath(),dest=dest,scaleTo=2000,RESPONSE=RESPONSE)
                 
         #ret=os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ -dir=%s -dest=/mpiwg/temp/online/scaled/small -scaleto=2000 &"% self.ImageViewerPath)          #ret=os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ -dir=%s -dest=/mpiwg/temp/online/scaled/small -scaleto=2000 &"% self.ImageViewerPath)
         if RESPONSE:          if RESPONSE:
Line 911  class ImageCollection(OrderedFolder, Per Line 993  class ImageCollection(OrderedFolder, Per
         return "rescaling started"          return "rescaling started"
   
           
     def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,serverPath=genericServerPath):      def __init__(self,id,title,ImageViewerPath,defaultMetaString,destBasis,srcBasis,serverPath=genericServerPath):
         self.id=id          self.id=id
         self.title=title          self.title=title
         self.ImageStoragePath=ImageStoragePath  
         self.ImageViewerPath=ImageViewerPath          self.ImageViewerPath=ImageViewerPath
         self.defaultMetaString=defaultMetaString          self.defaultMetaString=defaultMetaString
         self.serverPath=serverPath          self.serverPath=serverPath
           self.destBasis=destBasis
           self.srcBasis=srcBasis
         self.defaultrows = 6          self.defaultrows = 6
         self.defaultcols = 2          self.defaultcols = 2
   
Line 925  class ImageCollection(OrderedFolder, Per Line 1008  class ImageCollection(OrderedFolder, Per
   
     manage_options = optTMP+(      manage_options = optTMP+(
         {'label':'Main Config','action':'ImageCollection_config'},          {'label':'Main Config','action':'ImageCollection_config'},
           {'label':'Config Scaler','action':'configScaleForm'},
         {'label':'Import','action':'ImportFiles'},          {'label':'Import','action':'ImportFiles'},
         {'label':'Recalculate MetadataLink','action':'recalculateMetaLink'},          {'label':'Recalculate MetadataLink','action':'recalculateMetaLink'},
         {'label':'Import Metadata File','action':'importMetaFileForm'},          {'label':'Import Metadata File','action':'importMetaFileForm'},
Line 1156  class ImageCollection(OrderedFolder, Per Line 1240  class ImageCollection(OrderedFolder, Per
   
     def ImportFiles2(self,RESPONSE=None):      def ImportFiles2(self,RESPONSE=None):
         """Import the existing files of a folder"""          """Import the existing files of a folder"""
         files=os.listdir(self.ImageStoragePath)          files=os.listdir(self.getImageStoragePath())
         ret=""          ret=""
         #print self.__dict__          #print self.__dict__
         for file in files:          for file in files:
Line 1174  class ImageCollection(OrderedFolder, Per Line 1258  class ImageCollection(OrderedFolder, Per
                     self._setObject(file,newObj)                      self._setObject(file,newObj)
         #print ret          #print ret
         #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)          #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
         #print self.ImageStoragePath          #print self.getImageStoragePath()
   
         #scale thumb          #scale thumb
                   
Line 1198  class ImageCollection(OrderedFolder, Per Line 1282  class ImageCollection(OrderedFolder, Per
   
     def ImportStructure(self,RESPONSE=None):      def ImportStructure(self,RESPONSE=None):
         """Import the existing files of a folder"""          """Import the existing files of a folder"""
         files=os.listdir(self.ImageStoragePath)          files=os.listdir(self.getImageStoragePath())
         ret=""          ret=""
         #print self.__dict__          #print self.__dict__
   
   
         for file in files:          for file in files:
                           
             if os.path.isdir(os.path.join(self.ImageStoragePath,file)):              if os.path.isdir(os.path.join(self.getImageStoragePath(),file)):
                 imageStoragePath=os.path.join(self.ImageStoragePath,file)                  ImageStoragePath=os.path.join(self.getImageStoragePath(),file)
                 imageViewerPath=os.path.join(self.ImageViewerPath,file)                  imageViewerPath=os.path.join(self.ImageViewerPath,file)
                 manage_AddImageCollection(self,file,file,imageStoragePath,imageViewerPath,self.defaultMetaString)                  #manage_AddImageCollection(self,file,file,self.getImageStoragePath(),imageViewerPath,self.defaultMetaString)
                               manage_AddImageCollection(self,file,file,imageViewerPath,self.defaultMetaString,self.destBasis,self.srcBasis,self.serverPath)
                 obj=getattr(self,file)                  obj=getattr(self,file)
                 obj.ImportStructure()                  obj.ImportStructure()
             else:              else:
Line 1228  class ImageCollection(OrderedFolder, Per Line 1312  class ImageCollection(OrderedFolder, Per
                             """nothing yet"""                              """nothing yet"""
         #print ret          #print ret
         #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)          #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
         #print self.ImageStoragePath          #print self.getImageStoragePath()
   
                 #scale thumb                  #scale thumb
                   
Line 1243  class ImageCollection(OrderedFolder, Per Line 1327  class ImageCollection(OrderedFolder, Per
           
     def ImportFiles(self,RESPONSE=None):      def ImportFiles(self,RESPONSE=None):
         """Import the existing files of a folder"""          """Import the existing files of a folder"""
         files=os.listdir(self.ImageStoragePath)          files=os.listdir(self.getImageStoragePath())
         ret=""          ret=""
         #print self.__dict__          #print self.__dict__
         for file in files:          for file in files:
Line 1264  class ImageCollection(OrderedFolder, Per Line 1348  class ImageCollection(OrderedFolder, Per
                         """nothing yet"""                          """nothing yet"""
         #print ret          #print ret
         #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)          #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
         #print self.ImageStoragePath          #print self.getImageStoragePath()
   
                 #scale thumb                  #scale thumb
                   
Line 1285  class ImageCollection(OrderedFolder, Per Line 1369  class ImageCollection(OrderedFolder, Per
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeImageCollectionForm.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeImageCollectionForm.zpt')).__of__(self)
         return pt()          return pt()
   
     def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,serverPath,RESPONSE=None):      def ChangeImageCollection(self,title,ImageViewerPath,defaultMetaString,serverPath,destBasis,srcBasis,RESPONSE=None):
         """Change"""          """Change"""
         self.title=title          self.title=title
         self.ImageStoragePath=ImageStoragePath  
         self.ImageViewerPath=ImageViewerPath          self.ImageViewerPath=ImageViewerPath
         self.defaultMetaString=defaultMetaString          self.defaultMetaString=defaultMetaString
         self.serverPath=serverPath          self.serverPath=serverPath
           self.destBasis=destBasis
           self.srcBasis=srcBasis
                   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
Line 1558  class ImageCollection(OrderedFolder, Per Line 1643  class ImageCollection(OrderedFolder, Per
         return ret          return ret
   
           
     def show_thumbs_selected_rows(self,numberOfColumns):      def show_thumbs_selected_rows(self,numberOfColumns,start=0,max=10000):
         """Ausgabe anzahl"""          """Ausgabe anzahl"""
         ids=self.show_selected_thumbs()          ids=self.show_selected_thumbs()
   
         if not ids:          if not ids:
                 return None                  return None
         self.REQUEST.SESSION['ids']=ids          self.REQUEST.SESSION['ids']=ids
         number=int(len(ids)/numberOfColumns)+1          number=min(start+int(len(ids)/numberOfColumns)+1,max)
         self.REQUEST.SESSION['number']=range(number)          
         return range(number+1)          self.REQUEST.SESSION['number']=range(start,number)
           return range(start,number+1)
   
     def setColTimesRowForm(self):      def setColTimesRowForm(self):
         """form for matrix setting"""          """form for matrix setting"""
Line 1629  class ImageCollection(OrderedFolder, Per Line 1715  class ImageCollection(OrderedFolder, Per
         if showall=='yes':          if showall=='yes':
             rows=int(idsnumber/cols)+1              rows=int(idsnumber/cols)+1
                           
           logTime("getColTimesRow finished")
         return (cols,rows)          return (cols,rows)
                                   
                   
Line 1672  class ImageCollection(OrderedFolder, Per Line 1759  class ImageCollection(OrderedFolder, Per
         self.REQUEST.SESSION['ids']=ids          self.REQUEST.SESSION['ids']=ids
         number=int(len(ids)/numberOfColumns)+1          number=int(len(ids)/numberOfColumns)+1
           
           logTime("show_thumbs_rows finished (%s)"%str(number))
         return range(number+1)          return range(number+1)
   
     def show_thumbs_columns(self,row,numberOfColumns):      def show_thumbs_columns(self,row,numberOfColumns):
         """Ausgabe einer Liste der Reihe"""          """Ausgabe einer Liste der Reihe"""
         ids=self.REQUEST.SESSION['ids']          ids=self.REQUEST.SESSION['ids']
         max=len(ids)          max=len(ids)
           logTime("show_thumb_columns finishes row: %s"%row)
         if (row*numberOfColumns)<max:          if (row*numberOfColumns)<max:
             return ids[(row-1)*numberOfColumns:row*numberOfColumns]              return ids[(row-1)*numberOfColumns:row*numberOfColumns]
         else:          else:
             return ids[(row-1)*numberOfColumns:]              return ids[(row-1)*numberOfColumns:]
                   
     def thumblistSelected_old(self):  
         """main template collection"""  
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselected.zpt')).__of__(self)  
         return pt()  
   
     def thumblistSelected(self):      def thumblistSelected(self):
         """main template collection"""          """main template collection"""
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselected2.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselected2.zpt')).__of__(self)
         return pt()          return pt()
           
     def thumblist_old(self):  
         """main template collection"""  
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbs.zpt')).__of__(self)  
         return pt()  
   
     def thumblist(self):      def thumblist(self):
         """main template collection"""          """main template collection"""
Line 1740  class ImageCollection(OrderedFolder, Per Line 1821  class ImageCollection(OrderedFolder, Per
         #FIXME: umlaute in filename          #FIXME: umlaute in filename
         fn=getattr(self,repr(filename),None)          fn=getattr(self,repr(filename),None)
         if not fn:          if not fn:
             filenameM=filename.split(".")[0]  
           if os.path.splitext(filename)[1].lower() in imageExtensions:
                   filenameM=os.path.splitext(filename)[0]
               else:                    
              filenameM=filename
   
   
                                                           
             founds=self.ZopeFind(self,obj_metatypes=['ImageDigilib'])              founds=self.ZopeFind(self,obj_metatypes=['ImageDigilib'])
   
   
             for found in founds:              for found in founds:
                 foundM=found[0].split(".")[0]          if os.path.splitext(found[0])[1].lower() in imageExtensions:
                       foundM=os.path.splitext(found[0])[0]
           else:   
               foundM=found[0]
   
                 if filenameM.lower()==foundM.lower():                  if filenameM.lower()==foundM.lower():
                     if onlyName:                      if onlyName:
Line 1831  def manage_AddImageCollectionForm(self): Line 1921  def manage_AddImageCollectionForm(self):
     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionForm.zpt')).__of__(self)      pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionForm.zpt')).__of__(self)
     return pt()      return pt()
           
 def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):  def manage_AddImageCollection(self,id,title,ImageViewerPath,defaultMetaString,destBasis,srcBasis,serverPath,RESPONSE=None):
   
     """Add ImageCollection"""      """Add ImageCollection"""
     newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)      newObj=ImageCollection(id,title,ImageViewerPath,defaultMetaString,destBasis,srcBasis,serverPath=genericServerPath)
     self._setObject(id,newObj)      self._setObject(id,newObj)
           
     if RESPONSE is not None:      if RESPONSE is not None:
Line 1862  class ImageCollectionMD(ImageCollection, Line 1953  class ImageCollectionMD(ImageCollection,
           
     def ImportFiles(self,RESPONSE=None):      def ImportFiles(self,RESPONSE=None):
         """Import the existing files of a folder"""          """Import the existing files of a folder"""
         files=os.listdir(self.ImageStoragePath)          files=os.listdir(self.getImageStoragePath())
         ret=""          ret=""
         #print self.__dict__          #print self.__dict__
         for file in files:          for file in files:
Line 1874  class ImageCollectionMD(ImageCollection, Line 1965  class ImageCollectionMD(ImageCollection,
                     ret=ret+"<br>"+file+" already exists!"                      ret=ret+"<br>"+file+" already exists!"
   
                 else:                  else:
                       logger("ImageArchiveMD:import", logging.INFO, "adding ZOPE: %s"%file)
                     ret=ret+"<br>"+file+" created!"                      ret=ret+"<br>"+file+" created!"
                     newObj=ImageDigilib(file,file)                      newObj=ImageDigilib(file,file)
                     #print newObj,file                      #print newObj,file
Line 1883  class ImageCollectionMD(ImageCollection, Line 1975  class ImageCollectionMD(ImageCollection,
                     except:                      except:
                         """nothing yet"""                          """nothing yet"""
                                                   
                                       # check entry in database
                     args={}                      args={}
                     args['_table']=self.imageCollectionConfig.getTable()                      args['_table']=self.imageCollectionConfig.getTable()
                     args[self.imageCollectionConfig.getKey()]=file                      args[self.imageCollectionConfig.getKey()]=file
                                           
                     if not self.ZSQLInlineSearch(args=args):                  if not self.ZSQLInline(args=args):
                       logger("ImageArchiveMD:import", logging.INFO, "adding DB: %s"%file)
                         self.ZSQLAdd(args=args)                              self.ZSQLAdd(args=args)    
    
         #print ret          #print ret
         #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)          #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
         #print self.ImageStoragePath          #print self.ImageStoragePath
Line 1903  class ImageCollectionMD(ImageCollection, Line 1997  class ImageCollectionMD(ImageCollection,
   
         self.scaleWorkingVersions()          self.scaleWorkingVersions()
                   
         self.scaleToJpgs()          #self.scaleToJpgs()
                   
         if RESPONSE:          if RESPONSE:
                 RESPONSE.redirect('manage_main')                  RESPONSE.redirect('manage_main')
Line 1987  class ImageCollectionMD(ImageCollection, Line 2081  class ImageCollectionMD(ImageCollection,
                   
         rc=[]          rc=[]
         fnIds={}          fnIds={}
   
         for found in self.ZSQLInlineSearch(args=self.REQUEST.form):          for found in self.ZSQLInlineSearch(args=self.REQUEST.form):
             key=getattr(found,self.imageCollectionConfig.getKey())              key=getattr(found,self.imageCollectionConfig.getKey())
             key=self.getImageByName(key,onlyName="yes")                      key=self.getImageByName(key,onlyName="yes")        
Line 2020  class ImageCollectionMD(ImageCollection, Line 2115  class ImageCollectionMD(ImageCollection,
     def index_html(self,fn=None,selection=None,generic='No',REQUEST=None,RESPONSE=None):      def index_html(self,fn=None,selection=None,generic='No',REQUEST=None,RESPONSE=None):
         """main template collection"""          """main template collection"""
   
                   logTime("index_html %s"%self.REQUEST['QUERY_STRING'])
         mode=self.REQUEST.get('mode','view')          mode=self.REQUEST.get('mode','view')
         if fn:          if fn:
             ret=[]              ret=[]
Line 2171  class ImageCollectionMD(ImageCollection, Line 2266  class ImageCollectionMD(ImageCollection,
   
     def thumblistMD(self):      def thumblistMD(self):
         """main template collection"""          """main template collection"""
           logTime("thumbList MD %s"%self.REQUEST['QUERY_STRING'])
           
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbListMD.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbListMD.zpt')).__of__(self)
           self.REQUEST.RESPONSE.setHeader('Cache-Control','max-age=3600')
           self.REQUEST.RESPONSE.setHeader('Last-Modified',self.bobobase_modification_time().toZone('GMT').rfc822())
         return pt()          return pt()
           
       
     def getRights(self,id):      def getRights(self,id):
         """get the rights from a database"""          """get the rights from a database"""
         #print self.rightsQuery%id          #print self.rightsQuery%id
         results=self.ZSQLSimpleSearch(self.getRightsQuery()%id)          results=self.ZSQLSimpleSearch(self.getRightsQuery()%id)
           logging.error("rightsQuery: %s"%(self.getRightsQuery()%id))
         if results:          if results:
             result = getattr(results[0],self.getRightsQueryField())              result = getattr(results[0],self.getRightsQueryField())
         else:          else:
Line 2189  class ImageCollectionMD(ImageCollection, Line 2290  class ImageCollectionMD(ImageCollection,
         #return url          #return url
                   
         url=urllib.unquote(url)          url=urllib.unquote(url)
        
           url=url.replace(" ","+") # ersetze Leerzeichen in der URL durch "+"
           print url
         xmldoc=urllib.urlopen(url).read()          xmldoc=urllib.urlopen(url).read()
         #return xmldoc          #return xmldoc
         try:          try:
Line 2250  class ImageCollectionMD(ImageCollection, Line 2354  class ImageCollectionMD(ImageCollection,
                 pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)                  pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
                 return pt()                          return pt()        
                   
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)  
         return pt()          
   
     def selection(self):      def selection(self):
         """show only selected"""          """show only selected"""
Line 2273  def manage_AddImageCollectionMDForm(self Line 2375  def manage_AddImageCollectionMDForm(self
     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionFormMD.zpt')).__of__(self)      pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionFormMD.zpt')).__of__(self)
     return pt()      return pt()
           
 def manage_AddImageCollectionMD(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):  def manage_AddImageCollectionMD(self,id,title,ImageViewerPath,defaultMetaString,destBasis,srcBasis,serverPath,RESPONSE=None):
     """Add ImageCollection"""      """Add ImageCollection"""
     newObj=ImageCollectionMD(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)      newObj=ImageCollectionMD(id,title,ImageViewerPath,defaultMetaString,destBasis,srcBasis,serverPath)
     self._setObject(id,newObj)      self._setObject(id,newObj)
           
     if RESPONSE is not None:      if RESPONSE is not None:
Line 2413  def manage_AddImageZogiLib(self,id=None, Line 2515  def manage_AddImageZogiLib(self,id=None,
     self._setObject(id,newObj)      self._setObject(id,newObj)
     getattr(self,id).caption=caption[0:]      getattr(self,id).caption=caption[0:]
     if fileUpload:      if fileUpload:
         getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)          getattr(self,id).uploadImage(fileupload,self.getImageStoragePath())
           
     if RESPONSE is not None:      if RESPONSE is not None:
         RESPONSE.redirect('manage_main')          RESPONSE.redirect('manage_main')

Removed from v.1.91  
changed lines
  Added in v.1.108


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