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

version 1.84, 2006/05/17 19:10:49 version 1.91, 2006/05/22 20:20:17
Line 1 Line 1
 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
   
   
   from Ft.Xml.Domlette import NonvalidatingReader
 from OFS.Folder import Folder  from OFS.Folder import Folder
 from OFS.OrderedFolder import OrderedFolder  from OFS.OrderedFolder import OrderedFolder
 from OFS.SimpleItem import SimpleItem  from OFS.SimpleItem import SimpleItem
Line 286  class ImageDigilib(Folder,Persistent,Imp Line 286  class ImageDigilib(Folder,Persistent,Imp
                   
         )          )
   
   
           
     def getAccessRight(self):      def getAccessRight(self):
         """get the accessright, return is string "extern" or "intern" """          """get the accessright, return is string "extern" or "intern" """
         return self.getRights(self.filename.split('.')[0])          return self.getRights(self.filename.split('.')[0])
Line 388  class ImageDigilib(Folder,Persistent,Imp Line 390  class ImageDigilib(Folder,Persistent,Imp
             os.chmod(filename,0664)              os.chmod(filename,0664)
         except:          except:
             """hack"""              """hack"""
         #scale thumb          #< thumb
                   
         self.scaleThumbs()          self.scaleThumbs()
   
Line 486  class ImageDigilib(Folder,Persistent,Imp Line 488  class ImageDigilib(Folder,Persistent,Imp
   
             self.scaleWorkingVersions()              self.scaleWorkingVersions()
   
               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)
                   
       def scaleToJpg(self,RESPONSE=None):
           """create a  jpg"""
           
           #create backup of the original file
           
           imagePath=os.path.join(self.ImageStoragePath,self.filename)
           path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")
                   
           if not os.path.exists(path):
               os.mkdir(path,0775)
               os.chmod(path,0775)
               
           newName=os.path.join(path,self.getId())
   
           if os.path.exists(newName):
               zLOG.LOG("ImageArchive:scaleToJpg", zLOG.INFO, "%s already exists"%newName)
           else:
               try:
                   os.rename(imagePath,newName)
               except:
                   zLOG.LOG("ImageArchive:scaleToJpg", zLOG.ERROR, "%s "%newName)
                   return False
               
       
               
           dest="/Volumes/paviaExtern/docuserver/images/exhibitionImages/"
           dir=self.getId()
       src=path
           self.scale(dest=dest,dir=dir,src=path,scaleBy=1,RESPONSE=RESPONSE)
           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"""
Line 522  class ImageDigilib(Folder,Persistent,Imp Line 554  class ImageDigilib(Folder,Persistent,Imp
                 zLOG.LOG("ImageArchive:updateImage", zLOG.ERROR, "rename: %s -> %s didn't work!"%(imagePath,imageNewPath))                    zLOG.LOG("ImageArchive:updateImage", zLOG.ERROR, "rename: %s -> %s didn't work!"%(imagePath,imageNewPath))  
           
             #lesen des upload files und schreiben              #lesen des upload files und schreiben
             filedata=file.read()              filedata=_fileupload.read()
             f=open(imagePath,"w") # if we wanted to have filename=id we should do it here!              f=open(imagePath,"w") # if we wanted to have filename=id we should do it here!
             f.write(filedata)              f.write(filedata)
             f.close()              f.close()
Line 537  class ImageDigilib(Folder,Persistent,Imp Line 569  class ImageDigilib(Folder,Persistent,Imp
             #scale standard              #scale standard
           
             self.scaleWorkingVersions()              self.scaleWorkingVersions()
                   self.scaleToJpg()
             if _rename:              if _rename:
                 self.renameImage(file.filename)                  self.renameImage(_fileupload.filename)
                   
             
         args=self.REQUEST.form          args=self.REQUEST.form
Line 657  class ImageCollection(OrderedFolder, Per Line 689  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 665  class ImageCollection(OrderedFolder, Per Line 698  class ImageCollection(OrderedFolder, Per
     imgcoll_thumb = PageTemplateFile('zpt/thumb', globals())      imgcoll_thumb = PageTemplateFile('zpt/thumb', globals())
     imgcoll_thumbMD = PageTemplateFile('zpt/thumbMD', globals())          imgcoll_thumbMD = PageTemplateFile('zpt/thumbMD', globals())    
   
       destBasis="/docuserver/scaled/"
       srcBasis="/docuserver/images"
       def scale(self,dest=None,dir=None,src=None,scaleTo=None,scaleBy=None,RESPONSE=None):
           """scaler"""
           #scaleomatStr="ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ %s"
           scaleomatStr="/docuserver/libs/scaleomat/scaleomat.pl"
   
           destBasis=self.destBasis
           srcBasis=self.srcBasis
           if src:
            srcStr=" -src=%s"%src
           else:
            srcStr=" -src=%s"%srcBasis
   
           scaleStr=scaleomatStr+srcStr
           if dir:
               dirTmp=dir.replace(srcBasis,'')
               dirStr=" -dir=%s"%dirTmp
               scaleStr=scaleStr+dirStr
           elif filename:
               fileTmp=filename.replace(srcBasis,'')
               fileStr=" -dir=%s"%fileTmp
               scaleStr=scaleStr+fileStr
           else:
               zLOG.LOG("ImageCollection:scale",zLOG.ERROR,"no directory or filename given")
               return False
           
           if dest is not None:
               destStr=" -dest=%s"%os.path.join(destBasis,dest)
               scaleStr=scaleStr+destStr
           else:
               zLOG.LOG("ImageCollection:scale",zLOG.ERROR,"no destionation given")
               return False
           
           if scaleTo:
               scaleToStr=" -scaleto=%s"%scaleTo
               scaleStr=scaleStr+scaleToStr
           elif scaleBy:
               scaleByStr=" -scaleby=%s"%scaleBy
               scaleStr=scaleStr+scaleByStr
           else:
               zLOG.LOG("ImageCollection:scale",zLOG.ERROR,"no destionation given")
               return False
        
          
           #ret=scaleStr
           ret=os.popen2(scaleStr,1)[1].read()
    
           if RESPONSE:
                RESPONSE.write(ret)
           return True
    
     def getImageObject(self,name):      def getImageObject(self,name):
         """gibt objeckt name zurueck"""          """gibt objeckt name zurueck"""
         if hasattr(self,name):          if hasattr(self,name):
Line 784  class ImageCollection(OrderedFolder, Per Line 869  class ImageCollection(OrderedFolder, Per
             self.REQUEST.RESPONSE.close()              self.REQUEST.RESPONSE.close()
   
                                           
       def scaleToJpgs(self,RESPONSE=None):
           """scale all tifs to jps"""
   
           for x in self._objects:
                   
                   if (not hasattr(getattr(self,x['id']),'scaleToJpg')) or (not getattr(self,x['id']).scaleToJpg()):
                       if RESPONSE:
                           RESPONSE.write('error:%s'%x)
                   
                   
                                           
     def scaleThumbs(self,RESPONSE=None):      def scaleThumbs(self,RESPONSE=None):
         """scale thumbs"""          """scale thumbs"""
                   
         #scale thumbs          #scale thumbs
         ret=os.popen("/docuserver/lib/scaleomat/scaleomat.pl -src=/mpiwg/online/ -dir=%s -dest=/docuserver/scaled/thumb -scaleto=100 &"% self.ImageViewerPath)          dest=os.path.join(self.scaledBasis,'thumb')
           self.scale(dir=self.ImageStoragePath,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)
         if RESPONSE:          if RESPONSE:
                 RESPONSE.write(ret.read())                  RESPONSE.write(ret.read())
                 RESPONSE.write("\n")                  RESPONSE.write("\n")
Line 801  class ImageCollection(OrderedFolder, Per Line 898  class ImageCollection(OrderedFolder, Per
                   
         #scale standard          #scale standard
   
         ret=os.popen("/docuserver/lib/scaleomat/scaleomat.pl  -src=/mpiwg/online/ -dir=%s -dest=/mpiwg/temp/online/scaled/small -scaleto=2000 &"% self.ImageViewerPath)          dest=os.path.join(self.scaledBasis,'small')
           self.scale(dir=self.ImageStoragePath,dest=dest,scaleTo=1000,RESPONSE=RESPONSE)
           
           dest=os.path.join(self.scaledBasis,'medium')
           self.scale(dir=self.ImageStoragePath,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)
         if RESPONSE:          if RESPONSE:
                 RESPONSE.write(ret.read())                  RESPONSE.write(ret.read())
                 RESPONSE.write("\n")                  RESPONSE.write("\n")
         return "rescaling started"          return "rescaling started"
   
   
       
     def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,serverPath=genericServerPath):      def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,serverPath=genericServerPath):
         self.id=id          self.id=id
         self.title=title          self.title=title
Line 1058  class ImageCollection(OrderedFolder, Per Line 1160  class ImageCollection(OrderedFolder, Per
         ret=""          ret=""
         #print self.__dict__          #print self.__dict__
         for file in files:          for file in files:
             if not file[0]==".":          fn=os.path.splitext(file)[0]
                 if self.__dict__.has_key(file):              if not (file[0]=="."):
                   if self.__dict__.has_key(file) or self.__dict__.has_key(fn+'.tif') or self.__dict__.has_key(fn+'.tiff') :
   
                     ret=ret+"<br>"+file+" already exists!"                      ret=ret+"<br>"+file+" already exists!"
                 else:                  else:
Line 1075  class ImageCollection(OrderedFolder, Per Line 1178  class ImageCollection(OrderedFolder, Per
   
         #scale thumb          #scale thumb
                   
         #self.scaleThumbs()          self.scaleThumbs()
   
         #scale standard          #scale standard
   
         #self.scaleWorkingVersions()          self.scaleWorkingVersions()
                   
   
         RESPONSE.redirect('manage_main')          RESPONSE.redirect('manage_main')
Line 1129  class ImageCollection(OrderedFolder, Per Line 1232  class ImageCollection(OrderedFolder, Per
   
                 #scale thumb                  #scale thumb
                   
         #self.scaleThumbs()          self.scaleThumbs()
   
         #scale standard          #scale standard
   
         #self.scaleWorkingVersions()          self.scaleWorkingVersions()
                   
         if RESPONSE:          if RESPONSE:
                 RESPONSE.redirect('manage_main')                  RESPONSE.redirect('manage_main')
Line 1144  class ImageCollection(OrderedFolder, Per Line 1247  class ImageCollection(OrderedFolder, Per
         ret=""          ret=""
         #print self.__dict__          #print self.__dict__
         for file in files:          for file in files:
             if not file[0]==".":          fn=os.path.splitext(file)[0]
                 if self.__dict__.has_key(file):              if not (file[0]=="."):
                   if self.__dict__.has_key(file) or self.__dict__.has_key(fn+'.tif') or self.__dict__.has_key(fn+'.tiff') :
   
                     ret=ret+"<br>"+file+" already exists!"                      ret=ret+"<br>"+file+" already exists!"
   
                 else:                  else:
                     ret=ret+"<br>"+file+" created!"                      ret=ret+"<br>"+file+" created!"
                     newObj=ImageDigilib(file,file)                      newObj=ImageDigilib(file,file)
Line 1163  class ImageCollection(OrderedFolder, Per Line 1268  class ImageCollection(OrderedFolder, Per
   
                 #scale thumb                  #scale thumb
                   
         #self.scaleThumbs()          self.scaleThumbs()
   
         #scale standard          #scale standard
   
Line 1631  class ImageCollection(OrderedFolder, Per Line 1736  class ImageCollection(OrderedFolder, Per
   
     def getImageByName(self,filename,onlyName=None):      def getImageByName(self,filename,onlyName=None):
         """get filename"""          """get filename"""
         print repr(filename)          #print repr(filename)
         #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:
Line 1761  class ImageCollectionMD(ImageCollection, Line 1866  class ImageCollectionMD(ImageCollection,
         ret=""          ret=""
         #print self.__dict__          #print self.__dict__
         for file in files:          for file in files:
             if not file[0]==".":  
                 if self.__dict__.has_key(file):              if not (file[0]=="."):
           fn=os.path.splitext(file)[0]
                   if self.__dict__.has_key(file) or self.__dict__.has_key(fn+'.tif') or self.__dict__.has_key(fn+'.tiff') :
   
                     ret=ret+"<br>"+file+" already exists!"                      ret=ret+"<br>"+file+" already exists!"
   
                 else:                  else:
                     ret=ret+"<br>"+file+" created!"                      ret=ret+"<br>"+file+" created!"
                     newObj=ImageDigilib(file,file)                      newObj=ImageDigilib(file,file)
Line 1789  class ImageCollectionMD(ImageCollection, Line 1897  class ImageCollectionMD(ImageCollection,
                 #scale thumb                  #scale thumb
                   
                   
         #self.scaleThumbs()          self.scaleThumbs()
   
         #scale standard          #scale standard
   
         #self.scaleWorkingVersions()          self.scaleWorkingVersions()
           
           self.scaleToJpgs()
                   
         if RESPONSE:          if RESPONSE:
                 RESPONSE.redirect('manage_main')                  RESPONSE.redirect('manage_main')
Line 1827  class ImageCollectionMD(ImageCollection, Line 1937  class ImageCollectionMD(ImageCollection,
                   
         self.ZSQLAdd(args=args)          self.ZSQLAdd(args=args)
                   
           self.scaleThumbs()
           self.scaleWorkingVersions()
           
           getattr(self,fn).scaleToJpg()
         if RESPONSE:          if RESPONSE:
             return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fn)              return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fn)
         #return  self.REQUEST['URL1']+'/'+fileupload.filename          #return  self.REQUEST['URL1']+'/'+fileupload.filename
Line 1870  class ImageCollectionMD(ImageCollection, Line 1984  class ImageCollectionMD(ImageCollection,
   
     def searchDB(self,REQUEST=None,RESPONSE=None,xml=None):      def searchDB(self,REQUEST=None,RESPONSE=None,xml=None):
         """search"""          """search"""
         #context.ZSQLFind(_table='vision_main')  
         urlTmp=REQUEST['URL1']  
                   
         url=urlTmp+'/searchResultXML?-table=%s&'%self.imageCollectionConfig.getTable()+REQUEST['QUERY_STRING']          rc=[]
           fnIds={}
           for found in self.ZSQLInlineSearch(args=self.REQUEST.form):
               key=getattr(found,self.imageCollectionConfig.getKey())
               key=self.getImageByName(key,onlyName="yes")        
               rc.append((key,'',0))
               fnIds[key]=('',0)
                   
           rc.sort()
           self.REQUEST.SESSION['filenames']=rc
           self.REQUEST.SESSION['filenamesIds']=fnIds
                   
         if xml is None:          overview=self.ZopeFind(self,obj_ids=['overview_selectedMD.html'])
             RESPONSE.redirect('xmlinput?url='+urllib.quote(url))              
           if overview:
                   return overview[0][1]()
         else:          else:
             RESPONSE.redirect(url)                  pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
                   return pt()        
           
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
           return pt()        
           
           #urlTmp=REQUEST['URL1']
           
           #url=urlTmp+'/searchResultXML?-table=%s&'%self.imageCollectionConfig.getTable()+REQUEST['QUERY_STRING']
           
           #if xml is None:
           #    RESPONSE.redirect('xmlinput?url='+urllib.quote(url))
           #else:
           #    RESPONSE.redirect(url)
                           
     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"""
Line 1919  class ImageCollectionMD(ImageCollection, Line 2056  class ImageCollectionMD(ImageCollection,
   
         self.REQUEST.SESSION['filename']=filen[0:]          self.REQUEST.SESSION['filename']=filen[0:]
                   
         if not self.REQUEST.SESSION['filename']=="":  #        if not self.REQUEST.SESSION['filename']=="":
             url=getattr(self.getImageByName(self.REQUEST.SESSION['filename']),'absolute_url')()  #            url=getattr(self.getImageByName(self.REQUEST.SESSION['filename']),'absolute_url')()
             if mode=="view":  #            if mode=="view":
                 self.REQUEST.RESPONSE.redirect(url)  #                self.REQUEST.RESPONSE.redirect(url)
             elif mode=="download":  #            elif mode=="download":
                 self.REQUEST.RESPONSE.redirect(url+"/download")  #                self.REQUEST.RESPONSE.redirect(url+"/download")
                   #                
         if self.REQUEST.has_key('showall'):          if self.REQUEST.has_key('showall'):
   
             self.REQUEST.SESSION['showall']=self.REQUEST.get('showall')              self.REQUEST.SESSION['showall']=self.REQUEST.get('showall')
Line 1939  class ImageCollectionMD(ImageCollection, Line 2076  class ImageCollectionMD(ImageCollection,
                           
   
             if overview and (generic =='No'):#              if overview and (generic =='No'):#
                 print "selected"                
                 print repr(overview[0][1])  
                 return overview[0][1]()                  return overview[0][1]()
             else:              else:
                 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)
Line 2056  class ImageCollectionMD(ImageCollection, Line 2192  class ImageCollectionMD(ImageCollection,
         xmldoc=urllib.urlopen(url).read()          xmldoc=urllib.urlopen(url).read()
         #return xmldoc          #return xmldoc
         try:          try:
                 dom=xml.dom.minidom.parseString(xmldoc)                  dom=NonvalidatingReader.parseUri(url)
   
         except:          except:
                 return "ERROR: (%s %s) %s"%(sys.exc_info()[0],sys.exc_info()[1],xmldoc)                  return "ERROR: (%s %s) %s"%(sys.exc_info()[0],sys.exc_info()[1],xmldoc)
   
         images=dom.getElementsByTagName('image')  
   
           imagenames=dom.xpath("//imagename")
         rc=[]          rc=[]
         fnIds={}          fnIds={}
         for image in images:          for imagename in imagenames:
                 imagename=image.getElementsByTagName('imagename')[0]  
                               
                   #imagename=image.xpath('./imagename')[0]
                   #print "im",imagename
                                   
                                   
                                   
                 idnr=image.getElementsByTagName('idnr')[0]                  idnr=imagename.xpath('../idnr')[0]
                 id=getText(idnr.childNodes)                  id=getText(idnr.childNodes)
                 try:                  try:
                     numberOfPages=image.getElementsByTagName('numberOfPages')[0]                      numberOfPages=imagename.xpath('../numberOfPages')[0]
                 except:                  except:
                     numberOfPages=None                      numberOfPages=None
                                           
Line 2089  class ImageCollectionMD(ImageCollection, Line 2227  class ImageCollectionMD(ImageCollection,
                 texts=getText(imagename.childNodes).split("\n") #mehrere bilder in return getrennter liste                  texts=getText(imagename.childNodes).split("\n") #mehrere bilder in return getrennter liste
                 for text in texts:                  for text in texts:
                     if not text=="":                      if not text=="":
               #print "a"
                         text=self.getImageByName(text,onlyName="yes")                          text=self.getImageByName(text,onlyName="yes")
               #print "b"
                         try:                          try:
                                 rc.append((str(text),id,nop))                                  rc.append((str(text),id,nop))
                                 fnIds[str(text)]=(id,nop)                                  fnIds[str(text)]=(id,nop)
Line 2097  class ImageCollectionMD(ImageCollection, Line 2237  class ImageCollectionMD(ImageCollection,
                                 rc.append((repr(text),id,nop))                                  rc.append((repr(text),id,nop))
                                 fnIds[repr(text)]=(id,nop)                                  fnIds[repr(text)]=(id,nop)
                                   
           #print "done"
         rc.sort()          rc.sort()
         self.REQUEST.SESSION['filenames']=rc          self.REQUEST.SESSION['filenames']=rc
         self.REQUEST.SESSION['filenamesIds']=fnIds          self.REQUEST.SESSION['filenamesIds']=fnIds

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


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