Diff for /ImageArchive/ImageArchive.py between versions 1.52 and 1.53

version 1.52, 2005/04/10 13:47:25 version 1.53, 2005/04/28 22:03:44
Line 14  import tempfile Line 14  import tempfile
 import shutil  import shutil
 from types import *  from types import *
 import time  import time
   from threading import Thread
   import Queue
   
 try:  try:
     from Products.ECHO_content.ECHO_collection import ECHO_basis      from Products.ECHO_content.ECHO_collection import ECHO_basis
Line 47  def getTextFromNode(nodename): Line 49  def getTextFromNode(nodename):
            rc = rc + node.data             rc = rc + node.data
     return rc      return rc
   
   class generateSet:
       """generateSetThread"""
   
       def __init__(self,filenames,filenamesIds,ImageViewerPath,ids,url,local=None,version="full"):
           """init generateSet"""
           self.filenames=filenames
           self.filenamesIds=filenamesIds
           self.ImageViewerPath=ImageViewerPath
           self.ids=ids
           self.local=local
           self.url=url
           self.version=version
           self.done=None
   
       def __call__(self):
           """call generate Set"""
   
           storeTempDir=tempfile.tempdir
           tempfile.tempdir="/tmp/archivesImageServer"
           tmpPath=tempfile.mktemp()
           tmpZip=tempfile.mktemp()+".zip"
           tmpFn=os.path.split(tmpZip)[1]
   
           if not os.path.exists(tempfile.tempdir):
               os.mkdir(tempfile.tempdir) 
   
           if not os.path.exists(tmpPath):
               os.mkdir(tmpPath) 
           
       self.response=""
   
           
           self.response="<h3>1. step: getting the images</h3>"
   
           for id in self.filenames:
   
               if self.filenamesIds.has_key(id[0]):
                   filename=self.filenamesIds[id[0]][0]+"_"+id[0]
               else:
                   filename=id[0]
   
                       self.response+=str("<p>Get File: %s<br>\n"%filename)
   
               if self.local:
                   if self.version=="working":
                       sourcePath="/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+os.path.splitext(id[0])[0]+".jpg"
                   else:
                       sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+id[0]
                   targetPath=tmpPath+"/"+filename
                   try:
                                   shutil.copyfile(sourcePath,targetPath)
                   except:
                                   self.response+=(str("<p>Error in File: %s (possible missing)<br>\n"%filename))
               else:
                   if self.version=="working":
                       path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&dh=2000&dw=2000"
                   else:
                       path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&mo=rawfile,hires"
                   image=urllib.urlopen(path).read()
               
               
                   fh=file(tmpPath+"/"+filename,"w")
   
               
                   fh.write(image)
                   fh.close()
   
                       #folgeseiten
               if int(self.filenamesIds[id[0]][1])>1: 
                   #ids=self.show_thumbs()
                               
                       try:
                                   nr=self.ids.index(id[0])
                   except:
                                   self.reponse+=str("<p>Error in File: %s (possible missing)<br>\n"%id[0])
                   
   
                                   nr=0
   
                   numberOfPages=self.filenamesIds[id[0]][1]
                   for k in range(int(numberOfPages)-1):
                       i=k+1
                       if self.filenamesIds.has_key(id[0]):
                           filename=self.filenamesIds[id[0]][0]+"_"+self.ids[nr+i]
                       else:
                           filename=id[0]
   
                                       self.response+=str("<p>Get File: %s<br>\n"%filename)
   
                       if self.local:
                           sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+self.ids[nr+1]
                           targetPath=tmpPath+"/"+filename
                           try:
                               shutil.copyfile(sourcePath,targetPath)
                           except:
                                                   self.response+=str("<p>Error in File: %s (missing?)<br>\n"%filename)
                             
                       else:
                           path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(ids[nr+i])[0]+"&mo=rawfile,hires"
   
                           image=urllib.urlopen(path).read()
                       
   
                           fh=file(tmpPath+"/"+filename,"w")
                           fh.write(image)
                           fh.close()
   
           self.response+="<h3>2. step: creating the downloadable file</h3>"
       self.response+="<p>Create Zip<br>"
           self.response+="<p>This can take a while....<br>\n"
   
           fh=os.popen2("zip -u %s %s/*"%(tmpZip,tmpPath),1)[1]
           self.response+="<br>"
           for c in fh.read():
               self.response+=c
               if c==")":
                   self.response+="<br>\n"
               
                   
   
           
           shutil.rmtree(tmpPath)
   
           self.response+="<p>finished<br>\n"
   
           len=os.stat(tmpZip)[6]
           downloadUrl=self.url+"/downloadSet"
           self.response+="""<h1><a href="downloadSet?fn=%s">Click here for download ( %i Byte)</a></h1>\n"""%(tmpFn,len)
           self.response+="""<p>The file will be stored for a while, you can download it later, the URL is:</p>
               <p><a href="downloadSet?fn=%s">%s?fn=%s</a></h1>\n"""%(tmpFn,downloadUrl,tmpFn)
   
           self.done=True
       def getResult(self):
           """get result"""
           return self.response
   
       def isDone(self):
           if self.done:
               return True
           else:
               return False
           
 class metaData(SimpleItem):  class metaData(SimpleItem):
     """Klasse fuer metadaten"""      """Klasse fuer metadaten"""
     meta_type="metaData"      meta_type="metaData"
Line 363  class ImageCollection(Folder, Persistent Line 507  class ImageCollection(Folder, Persistent
     meta_type="ImageCollection"      meta_type="ImageCollection"
   
         
           zipThreads={}
     genericMetaDataType="leiden_meta"      genericMetaDataType="leiden_meta"
   
     leiden_meta_fields=['image_id','date','country','place','people','description','photographer']      leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
Line 372  class ImageCollection(Folder, Persistent Line 516  class ImageCollection(Folder, Persistent
     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
   
         
       def refreshTxt(self):
           """txt fuer refresh"""
           tn=self.REQUEST.SESSION['threadName']
           return """ 2;url=%s?repeat=%s """%(self.absolute_url()+"/createSet",tn)
           
     def createSet(self,RESPONSE=None,local=None,version="working"):      def createSet(self,RESPONSE=None,local=None,version="working",repeat=None):
         """download aller gewaehlten files"""          """download aller gewaehlten files"""
             storeTempDir=tempfile.tempdir  
         tempfile.tempdir="/tmp/archivesImageServer"  
           
         tmpPath=tempfile.mktemp()  
           
   
         tmpZip=tempfile.mktemp()+".zip"  
         tmpFn=os.path.split(tmpZip)[1]  
   
   
         if not os.path.exists(tempfile.tempdir):  
             os.mkdir(tempfile.tempdir)   
   
         if not os.path.exists(tmpPath):              threadName=repeat
             os.mkdir(tmpPath)   
                   
                   
         if RESPONSE:              if not threadName or threadName=="":
             RESPONSE.setHeader("Content-Type","text/html")                  threadStart=generateSet(self.REQUEST.SESSION['filenames'],self.REQUEST.SESSION['filenamesIds'],self.ImageViewerPath,self.show_thumbs(),self.absolute_url(),local=local,version=version)
             RESPONSE.write("<h1>I am creating  the download archive</h1>")                  thread=Thread(target=threadStart)
             RESPONSE.write("<h3>1. step: getting the images</h3>")  
   
         if not self.REQUEST.SESSION.has_key('filenames'):  
             RESPONSE.write("<h2>ERROR</h2>")  
             RESPONSE.write("<p>I forgot, the selected files. Please reselect.\n")  
             return 0  
                   
         for id in self.REQUEST.SESSION['filenames']:                  thread.start()
   
             if self.REQUEST.SESSION.has_key('filenamesIds') and self.REQUEST.SESSION['filenamesIds'].has_key(id[0]):  
                 filename=self.REQUEST.SESSION['filenamesIds'][id[0]][0]+"_"+id[0]  
             else:  
                 filename=id[0]  
   
             if RESPONSE:  
                 RESPONSE.write(str("<p>Get File: %s<br>\n"%filename))  
   
             if local:                  self.zipThreads[thread.getName()[0:]]=threadStart
                 if version=="working":                  self.REQUEST.SESSION['threadName']=thread.getName()[0:]
                     sourcePath="/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+os.path.splitext(id[0])[0]+".jpg"                  wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['zip_wait_template'])
                 else:                  if wait_template:
                     sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+id[0]                      return wait_template[0][1]()
                 targetPath=tmpPath+"/"+filename                  pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_Wait.zpt')).__of__(self)
                 try:                  return pt()
                     shutil.copyfile(sourcePath,targetPath)                  #xmltrans.run()
                 except:  
                     if RESPONSE:  
                         RESPONSE.write(str("<p>Error in File: %s (possible missing)<br>\n"%filename))  
                     else:  
                         """nothing"""  
             else:  
                 if version=="working":  
                     path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&dh=2000&dw=2000"  
                 else:                  else:
                     path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&mo=rawfile,hires"                  self.REQUEST.SESSION['threadName']=threadName
                 image=urllib.urlopen(path).read()  
               
               
                 fh=file(tmpPath+"/"+filename,"w")  
   
                   if (self.zipThreads[threadName].getResult()==None):
                           
                 fh.write(image)                      wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template'])
                 fh.close()                      if wait_template:
                       return wait_template[0][1]()
             #folgeseiten  
             if int(self.REQUEST.SESSION['filenamesIds'][id[0]][1])>1:   
                 ids=self.show_thumbs()  
                     try:  
                  nr=ids.index(id[0])  
                 except:  
                  if RESPONSE:  
                         RESPONSE.write(str("<p>Error in File: %s (possible missing)<br>\n"%id[0]))  
                  else:  
                         """nothing"""  
   
                      nr=0  
   
                 numberOfPages=self.REQUEST.SESSION['filenamesIds'][id[0]][1]                      pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_Wait.zpt')).__of__(self)
                 for k in range(int(numberOfPages)-1):                      return pt()
                     i=k+1  
                     if self.REQUEST.SESSION.has_key('filenamesIds') and self.REQUEST.SESSION['filenamesIds'].has_key(id[0]):  
                         filename=self.REQUEST.SESSION['filenamesIds'][id[0]][0]+"_"+ids[nr+i]  
                     else:                      else:
                         filename=id[0]                      if self.zipThreads[threadName].isDone():
                           self.REQUEST.SESSION['result']=self.zipThreads[threadName].getResult()
                     if RESPONSE:                          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_result.zpt')).__of__(self)
                         RESPONSE.write(str("<p>Get File: %s<br>\n"%filename))                          return pt()
   
                     if local:  
                         sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+ids[nr+1]  
                         targetPath=tmpPath+"/"+filename  
                         try:  
                             shutil.copyfile(sourcePath,targetPath)  
                         except:  
                             if RESPONSE:  
                                 RESPONSE.write(str("<p>Error in File: %s (missing?)<br>\n"%filename))  
                             else:                              else:
                                 """nothing"""                          self.REQUEST.SESSION['result']=self.zipThreads[threadName].getResult()
                     else:                          self.REQUEST.SESSION['threadName']=threadName
                         path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(ids[nr+i])[0]+"&mo=rawfile,hires"                          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_Wait_result.zpt')).__of__(self)
                           return pt()
                         image=urllib.urlopen(path).read()  
                       
   
                         fh=file(tmpPath+"/"+filename,"w")  
                         fh.write(image)  
                         fh.close()  
   
         if RESPONSE:  
             RESPONSE.write("<h3>2. step: creating the downloadable file</h3>")  
             RESPONSE.write("<p>Create Zip<br>")  
             RESPONSE.write("<p>This can take a while....<br>\n")  
         if RESPONSE:  
             fh=os.popen2("zip -u %s %s/*"%(tmpZip,tmpPath),1)[1]  
             RESPONSE.write("<br>")  
             for c in fh.read():  
                 RESPONSE.write(c)  
   
                 if c==")":  
                     RESPONSE.write("<br>\n")  
               
                                   
         else:  
             os.popen("zip -u %s %s/*"%(tmpZip,tmpPath))  
   
                   
         shutil.rmtree(tmpPath)  
   
         if RESPONSE:  
             RESPONSE.write("<p>finished<br>\n")  
   
         if RESPONSE:  
             len=os.stat(tmpZip)[6]  
             downloadUrl=self.absolute_url()+"/downloadSet"  
             RESPONSE.write("""<h1><a href="downloadSet?fn=%s">Click here for download ( %i Byte)</a></h1>\n"""%(tmpFn,len))  
             RESPONSE.write("""<p>The file will be stored for a while, you can download it later, the URL is:</p>  
             <p><a href="downloadSet?fn=%s">%s?fn=%s</a></h1>\n"""%(tmpFn,downloadUrl,tmpFn))  
             RESPONSE.close()  
                   
     def downloadSet(self,fn):      def downloadSet(self,fn):
         """download prepared set"""          """download prepared set"""
Line 805  class ImageCollection(Folder, Persistent Line 861  class ImageCollection(Folder, Persistent
     def importStructure(self,path):      def importStructure(self,path):
         """import"""          """import"""
         splitted=os.path.split(path)          splitted=os.path.split(path)
         if os.path.isDir(path):          if os.path.isDir(path) and (len(splitted[1])>0) and (splitted[1][0]=="."):
             manage_AddImageCollection(self,splitted[1],splitted[1],path,self.ImageViewerPath,self.defaultMetaString,RESPONSE=None)              manage_AddImageCollection(self,splitted[1],splitted[1],path,self.ImageViewerPath,self.defaultMetaString,RESPONSE=None)
                           
             obj=getattr(self,splitted[1])              obj=getattr(self,splitted[1])

Removed from v.1.52  
changed lines
  Added in v.1.53


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