Diff for /ImageArchive/ImageArchive.py between versions 1.93 and 1.103

version 1.93, 2006/05/24 09:56:58 version 1.103, 2007/01/31 14:24:17
Line 24  from threading import Thread Line 24  from threading import Thread
 import Queue  import Queue
 import cgi  import cgi
 import sys  import sys
 import zLOG  
 import shutil  import shutil
   
   import logging
   
   #ersetzt logging
   def logger(txt,method,txt2):
       """logging"""
       logging.info(txt+ txt2)
   
   
   
 from AccessControl import ClassSecurityInfo, getSecurityManager  from AccessControl import ClassSecurityInfo, getSecurityManager
   
 try:  try:
Line 49  except: Line 58  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 89  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 127  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 488  class ImageDigilib(Folder,Persistent,Imp Line 508  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 507  class ImageDigilib(Folder,Persistent,Imp Line 527  class ImageDigilib(Folder,Persistent,Imp
         newName=os.path.join(path,self.getId())          newName=os.path.join(path,self.getId())
   
         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()          ext= os.path.splitext(imagePath)[1].lower()
Line 553  class ImageDigilib(Folder,Persistent,Imp Line 573  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()
Line 746  class ImageCollection(OrderedFolder, Per Line 766  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 763  class ImageCollection(OrderedFolder, Per Line 783  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 781  class ImageCollection(OrderedFolder, Per Line 802  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 828  class ImageCollection(OrderedFolder, Per Line 849  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 919  class ImageCollection(OrderedFolder, Per Line 940  class ImageCollection(OrderedFolder, Per
         dest=os.path.join(self.scaledBasis,'thumb')          dest=os.path.join(self.scaledBasis,'thumb')
         self.scale(dir=self.getImageStoragePath(),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 1593  class ImageCollection(OrderedFolder, Per Line 1614  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 1718  class ImageCollection(OrderedFolder, Per Line 1740  class ImageCollection(OrderedFolder, Per
         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 1775  class ImageCollection(OrderedFolder, Per Line 1789  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 1910  class ImageCollectionMD(ImageCollection, Line 1933  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 1919  class ImageCollectionMD(ImageCollection, Line 1943  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 1939  class ImageCollectionMD(ImageCollection, Line 1965  class ImageCollectionMD(ImageCollection,
   
         self.scaleWorkingVersions()          self.scaleWorkingVersions()
                   
         self.scaleToJpgs()          #self.scaleToJpgs()
                   
         if RESPONSE:          if RESPONSE:
                 RESPONSE.redirect('manage_main')                  RESPONSE.redirect('manage_main')
Line 2023  class ImageCollectionMD(ImageCollection, Line 2049  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 2225  class ImageCollectionMD(ImageCollection, Line 2252  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 2286  class ImageCollectionMD(ImageCollection, Line 2316  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"""

Removed from v.1.93  
changed lines
  Added in v.1.103


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