Diff for /ImageArchive/ImageArchive.py between versions 1.72 and 1.77

version 1.72, 2005/11/23 17:41:04 version 1.77, 2006/05/15 08:18:02
Line 3  genericServerPath="http://www.mpiwg-berl Line 3  genericServerPath="http://www.mpiwg-berl
   
   
 from OFS.Folder import Folder  from OFS.Folder import Folder
   from OFS.OrderedFolder import OrderedFolder
 from OFS.SimpleItem import SimpleItem  from OFS.SimpleItem import SimpleItem
 from Globals import Persistent,package_home  from Globals import Persistent,package_home
 from Acquisition import Implicit  from Acquisition import Implicit
Line 22  import time Line 23  import time
 from threading import Thread  from threading import Thread
 import Queue  import Queue
 import cgi  import cgi
   import sys
   import zLOG
   
   
 from AccessControl import ClassSecurityInfo, getSecurityManager  from AccessControl import ClassSecurityInfo, getSecurityManager
   
Line 49  except: Line 53  except:
 tdir = "/mpiwg/temp/tmp/archivesImageServer/"  tdir = "/mpiwg/temp/tmp/archivesImageServer/"
 #tdir="/tmp/archivesImageServer/"  #tdir="/tmp/archivesImageServer/"
   
   imageExtensions=['jpg','jpeg','tif','tiff','png']
   
 def splitPath(str):  def splitPath(str):
         str2=str.replace("\\","/")          str2=str.replace("\\","/")
         return os.path.split(str2)[1]          return os.path.split(str2)[1]
Line 297  class ImageDigilib(Folder,Persistent,Imp Line 303  class ImageDigilib(Folder,Persistent,Imp
         user=getSecurityManager().getUser()          user=getSecurityManager().getUser()
   
         roles=user.getRoles()          roles=user.getRoles()
   
           
           if self.getRightsQuery()=="":
               #query empty then always true
           return True
   
   
         if 'Authenticated' in roles:          if 'Authenticated' in roles:
             return True              return True
                   
Line 364  class ImageDigilib(Folder,Persistent,Imp Line 377  class ImageDigilib(Folder,Persistent,Imp
     def uploadImage(self,fileupload,path_name):      def uploadImage(self,fileupload,path_name):
         """upload an Image from an Requast"""          """upload an Image from an Requast"""
         #path_name=self.ImageStoragePath          #path_name=self.ImageStoragePath
         fn=splitPath(fileupload.filename)          fn = self.filename or splitPath(fileupload.filename)
         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
         try:          try:
             os.chmod(filename,0664)              os.chmod(filename,0664)
         except:          except:
Line 480  class ImageDigilib(Folder,Persistent,Imp Line 494  class ImageDigilib(Folder,Persistent,Imp
     def updateImage(self,file,rename=None,RESPONSE=None):      def updateImage(self,file,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.ImageStoragePath,self.getId())
               imagePath=os.path.join(self.ImageStoragePath,self.filename)
             path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")              path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")
                           
             if not os.path.exists(path):              if not os.path.exists(path):
Line 491  class ImageDigilib(Folder,Persistent,Imp Line 506  class ImageDigilib(Folder,Persistent,Imp
   
             #teste ob version schon existiert              #teste ob version schon existiert
   
             while os.path.exists(os.path.join(path,"V%i_%s"%(versionNumber,self.getId()))):              while os.path.exists(os.path.join(path,"V%i_%s"%(versionNumber,self.filename))):
                     versionNumber+=1                      versionNumber+=1
   
             #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.getId()))              imageNewPath=os.path.join(path,"V%i_%s"%(versionNumber,self.filename))
           try:
           #zLOG.LOG("ImageArchive:updateImage", zLOG.INFO, "rename: %s -> %s"%(imagePath,imageNewPath))
             os.rename(imagePath,imageNewPath)              os.rename(imagePath,imageNewPath)
           except:
           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=file.read()
             f=open(imagePath,"w")              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()
             try:              try:
Line 599  def manage_AddImageDigilib(self,id,fileu Line 618  def manage_AddImageDigilib(self,id,fileu
     """Add ImageCollection"""      """Add ImageCollection"""
           
     #fileupload=self.REQUEST['fileupload']      #fileupload=self.REQUEST['fileupload']
     fn=splitPath(fileupload.filename)      #fn=splitPath(fileupload.filename)
       fn = id # filename is the same as id
     newObj=ImageDigilib(id,fn,meta)      newObj=ImageDigilib(id,fn,meta)
           
     self._setObject(id,newObj)      self._setObject(id,newObj)
Line 610  def manage_AddImageDigilib(self,id,fileu Line 630  def manage_AddImageDigilib(self,id,fileu
   
                                     
   
 class ImageCollection(Folder, Persistent, Implicit,ECHO_basis):  class ImageCollection(OrderedFolder, Persistent, Implicit,ECHO_basis):
     """Sammelordner fuer Bilder"""      """Sammelordner fuer Bilder"""
     meta_type="ImageCollection"      meta_type="ImageCollection"
   
Line 631  class ImageCollection(Folder, Persistent Line 651  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
   
     imgcoll_main = PageTemplateFile('zpt/overview', globals())      imgcoll_main = PageTemplateFile('zpt/overview', globals())
       imgcoll_mainMD = PageTemplateFile('zpt/overviewMD', globals())
     imgcoll_thumb = PageTemplateFile('zpt/thumb', globals())      imgcoll_thumb = PageTemplateFile('zpt/thumb', globals())
       imgcoll_thumbMD = PageTemplateFile('zpt/thumbMD', globals())    
   
       def getImageObject(self,name):
           """gibt objeckt name zurueck"""
           if hasattr(self,name):
               return getattr(self,name)
           
           name=os.path.splitext(name)[0]
           for extension in imageExtensions:
               nameExt=name+"."+extension
   
               if hasattr(self,nameExt):
                   return getattr(self,nameExt)
               
               nameExt=name+"_."+extension
               if hasattr(self,nameExt):
                   return getattr(self,nameExt)
           
           return getattr(self,"defaultImg")
   
     def getServerPath(self):      def getServerPath(self):
         """get Server path"""          """get Server path"""
Line 909  class ImageCollection(Folder, Persistent Line 949  class ImageCollection(Folder, Persistent
         try:          try:
                 dom=xml.dom.minidom.parseString(xmldoc)                  dom=xml.dom.minidom.parseString(xmldoc)
         except:          except:
                 return xmldoc                  return "ERROR: (%s %s) %s"%(sys.exc_info()[0],sys.exc_info()[1],xmldoc)
   
         images=dom.getElementsByTagName('image')          images=dom.getElementsByTagName('image')
   
         rc=[]          rc=[]
Line 919  class ImageCollection(Folder, Persistent Line 960  class ImageCollection(Folder, Persistent
                                   
                                   
                                   
                   
                 idnr=image.getElementsByTagName('idnr')[0]                  idnr=image.getElementsByTagName('idnr')[0]
                 id=getText(idnr.childNodes)                  id=getText(idnr.childNodes)
                 try:                  try:
Line 938  class ImageCollection(Folder, Persistent Line 980  class ImageCollection(Folder, Persistent
                 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=="":
                           text=self.getImageByName(text,onlyName="yes")
                         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 991  class ImageCollection(Folder, Persistent Line 1034  class ImageCollection(Folder, Persistent
         else:          else:
             meta=None              meta=None
                   
         if fileName:          fn=fileName or splitPath(fileupload.filename)
             fn=fileName  
         else:  
             fn=splitPath(fileupload.filename)  
                   
         manage_AddImageDigilib(self,fn,fileupload,meta=meta)          manage_AddImageDigilib(self,fn,fileupload,meta=meta)
                   
Line 1558  class ImageCollection(Folder, Persistent Line 1598  class ImageCollection(Folder, Persistent
         """navigation"""          """navigation"""
         #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']          #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selected.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selected.zpt')).__of__(self)
         return pt()  
           return pt().data
   
     def navig_html(self):      def navig_html(self):
         """navigation"""          """navigation"""
Line 1580  class ImageCollection(Folder, Persistent Line 1621  class ImageCollection(Folder, Persistent
   
     def getImageByName(self,filename,onlyName=None):      def getImageByName(self,filename,onlyName=None):
         """get filename"""          """get filename"""
                  print repr(filename)
         fn=getattr(self,filename,None)          #FIXME: umlaute in filename
           fn=getattr(self,repr(filename),None)
         if not fn:          if not fn:
             filenameM=filename.split(".")[0]              filenameM=filename.split(".")[0]
             founds=self.ZopeFind(self,obj_metatypes=['ImageDigilib'])              founds=self.ZopeFind(self,obj_metatypes=['ImageDigilib'])
Line 1599  class ImageCollection(Folder, Persistent Line 1641  class ImageCollection(Folder, Persistent
                   
                   
     security.declareProtected('View','index_html')      security.declareProtected('View','index_html')
     def index_html(self,fn=None):      def index_html(self,fn=None,generic='No'):
         """main template collection"""          """main template collection"""
           
         if fn:          if fn:
Line 1618  class ImageCollection(Folder, Persistent Line 1660  class ImageCollection(Folder, Persistent
                       
             overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])              overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
                           
             if overview:  
               if overview and (generic =='No'):
                 return overview[0][1]()                  return overview[0][1]()
             else:              else:
                 pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)                  pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
Line 1639  class ImageCollection(Folder, Persistent Line 1682  class ImageCollection(Folder, Persistent
                           
   
         overview=self.ZopeFind(self,obj_ids=['overview.html'])          overview=self.ZopeFind(self,obj_ids=['overview.html'])
         if overview:          if overview and (generic == 'No'):
             return overview[0][1]()              return overview[0][1]()
         elif hasattr(self,'templates'):          elif hasattr(self,'templates'):
             pt=self.templates.imgcoll_main.__of__(self)              pt=self.templates.imgcoll_main.__of__(self)
Line 1648  class ImageCollection(Folder, Persistent Line 1691  class ImageCollection(Folder, Persistent
             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview.zpt')).__of__(self)              pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview.zpt')).__of__(self)
             return pt()              return pt()
                   
       def navigation(self):
           """generate navigation bar"""
           
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_fragment')).__of__(self)
           return pt()    
           
 def manage_AddImageCollectionForm(self):  def manage_AddImageCollectionForm(self):
     """Nothing yet"""      """Nothing yet"""
Line 1682  class ImageCollectionMD(ImageCollection, Line 1730  class ImageCollectionMD(ImageCollection,
     except:      except:
       pass        pass
   
     
       def addImage(self):
           """Add an Image"""
                   
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addImageMD.zpt')).__of__(self)
           return pt()
       
       def addImage2(self,_fileupload,_fileName=None,_meta=None,_use_default=None,RESPONSE=None,**argv):
           """Add"""
   
           filenameKey="filename"
           #print "FU",fileupload
   
           if _use_default:
               try:
                   meta=self.meta_default(_fileupload.filename)
               except:
                   meta=None
           else:
               meta=None
           
           fn=_fileName or splitPath(_fileupload.filename)
           
           manage_AddImageDigilib(self,fn,_fileupload,meta=meta)
           
           args[key]=_filename
           
           self.ZSQLAdd(args=argv)
           
           if RESPONSE:
               return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fn)
           #return  self.REQUEST['URL1']+'/'+fileupload.filename
   
       def navig_html(self):
           """navigation"""
           #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
          
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigationMD.zpt')).__of__(self)
           return pt()
           
       def navig_selected_html(self):
           """navigation"""
           #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selectedMD.zpt')).__of__(self)
   
           return pt()
   
       def decode(self,str):
           """decoder"""
           if not str:
               return ""
           if type(str) is StringType:
               try:            
                   return str.decode('utf-8')
               except:
                   return str.decode('latin-1')
           else:
               
               return str
   
       def standardSearch(self):
           """standard search page"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','standardSearchPage.zpt')).__of__(self)
           return pt()        
           
       def searchResultXML(self):
           """xmlformat"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','searchResultXML.zpt')).__of__(self)
           return pt()        
   
       def searchDB(self,REQUEST=None,RESPONSE=None,xml=None):
           """search"""
           #context.ZSQLFind(_table='vision_main')
           urlTmp=REQUEST['URL1']
           
           url=urlTmp+'/searchResultXML?-table=vision_main&'+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):
           """main template collection"""
   
           
           mode=self.REQUEST.get('mode','view')
           if fn:
               ret=[]
   
               if type(fn) is ListType:
                   """experimentell mehr als ein filename"""
                   for filename in fn:
                       if not (filename == ""):
                           ret.append((filename,'',1))
               else:
                   ret.append((fn,'',1))
   
               self.REQUEST.SESSION['filenames']=ret
                   #self.REQUEST.SESSION['filenamesIds']=fnIds
             
               overview=self.ZopeFind(self,obj_ids=['overview_selectedMD.html'])
               
   
               if overview and (generic =='No'):
                   return overview[0][1]()
               else:
                   pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
                   return pt()        
   
           
           # filename given, then only display this file
           if self.REQUEST.has_key('filename'):
   
               filen=self.REQUEST['filename']
           else:
               filen=""
   
   
           self.REQUEST.SESSION['filename']=filen[0:]
           
           if not self.REQUEST.SESSION['filename']=="":
               url=getattr(self.getImageByName(self.REQUEST.SESSION['filename']),'absolute_url')()
               if mode=="view":
                   self.REQUEST.RESPONSE.redirect(url)
               elif mode=="download":
                   self.REQUEST.RESPONSE.redirect(url+"/download")
                   
           if self.REQUEST.has_key('showall'):
   
               self.REQUEST.SESSION['showall']=self.REQUEST.get('showall')
           else:
               self.REQUEST.SESSION['showall']=self.REQUEST.SESSION.get('showall','no')
               
               
           if selection:
               #selection i.e. selection already stored at self.REQUEST.SESSION['filenames']
               overview=self.ZopeFind(self,obj_ids=['overview_selectedMD.html'])
               
   
               if overview and (generic =='No'):#
                   print "selected"
                   print repr(overview[0][1])
                   return overview[0][1]()
               else:
                   pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
                   return pt()   
               
               
           #no filename then show overview
   
           overview=self.ZopeFind(self,obj_ids=['overviewMD.html'])
           if overview and (generic == 'No'):
   
             
               return overview[0][1]()
           elif hasattr(self,'templates'):
             
               pt=self.templates.imgcoll_mainMD.__of__(self)
               return pt()
           else:
             
               pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overviewMD.zpt')).__of__(self)
               return pt()
           
       def nextImage(self,request,selected=None,returnFn=None):
           """show nextimage"""
       
           if not selected and self.REQUEST.has_key('fn'):
               imagename=self.REQUEST['fn'].split('/')[-1]
               nr=self.getObjectPosition(imagename)
       
               objects=self.objectIds()
               if len(objects)==nr+1:
                   return ""
               else:
                   fn="/".join(self.REQUEST['fn'].split('/')[0:-1])+"/"+objects[nr+1]
                   return "<a href=\""+self.REQUEST['URL0']+"?fn="+fn+"\" target=\"_top\">next image</a>"                
   
       def prevImage(self,request,selected=None,returnFn=None):
           """show nextimage"""
       
           if not selected and self.REQUEST.has_key('fn'):
               imagename=self.REQUEST['fn'].split('/')[-1]
               nr=self.getObjectPosition(imagename)
       
               objects=self.objectIds()
               if nr==0:
                   return ""
               else:
                   fn="/".join(self.REQUEST['fn'].split('/')[0:-1])+"/"+objects[nr-1]
                   return "<a href=\""+self.REQUEST['URL0']+"?fn="+fn+"\" target=\"_top\">prev image</a>"                
       
           
     def changeRightsQueryForm(self):      def changeRightsQueryForm(self):
         """change Rights Query"""          """change Rights Query"""
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeRightsQueryForm.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeRightsQueryForm.zpt')).__of__(self)
Line 1732  class ImageCollectionMD(ImageCollection, Line 1974  class ImageCollectionMD(ImageCollection,
             result = ''              result = ''
         return result          return result
                   
       def xmlinput(self,url):
           """Anzeige von ausgewaehlten thumbs"""
           #return url
           
           url=urllib.unquote(url)
           xmldoc=urllib.urlopen(url).read()
           #return xmldoc
           try:
                   dom=xml.dom.minidom.parseString(xmldoc)
           except:
                   return "ERROR: (%s %s) %s"%(sys.exc_info()[0],sys.exc_info()[1],xmldoc)
   
           images=dom.getElementsByTagName('image')
   
           rc=[]
           fnIds={}
           for image in images:
                   imagename=image.getElementsByTagName('imagename')[0]
                 
                   
                   
                   
                   idnr=image.getElementsByTagName('idnr')[0]
                   id=getText(idnr.childNodes)
                   try:
                       numberOfPages=image.getElementsByTagName('numberOfPages')[0]
                   except:
                       numberOfPages=None
                       
                   if numberOfPages:
                       nopT=getText(numberOfPages.childNodes)
                       try:
                               nop=int(nopT)
                       except:
                               nop=0
                   else:
                       nop=0
                               
                   texts=getText(imagename.childNodes).split("\n") #mehrere bilder in return getrennter liste
                   for text in texts:
                       if not text=="":
                           text=self.getImageByName(text,onlyName="yes")
                           try:
                                   rc.append((str(text),id,nop))
                                   fnIds[str(text)]=(id,nop)
                           except:
                                   rc.append((repr(text),id,nop))
                                   fnIds[repr(text)]=(id,nop)
                   
   
           rc.sort()
           self.REQUEST.SESSION['filenames']=rc
           self.REQUEST.SESSION['filenamesIds']=fnIds
           
           overview=self.ZopeFind(self,obj_ids=['overview_selectedMD.html'])
               
           if overview:
                   return overview[0][1]()
           else:
                   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()        
   
       def selection(self):
           """show only selected"""
           if self.REQUEST.has_key('filename'):
               filen=self.REQUEST['filename']
           else:
               filen=""
           self.REQUEST.SESSION['filename']=filen
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
           return pt()  
           
       def thumblistSelectedMD(self):
           """main template collection"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselectedMD.zpt')).__of__(self)
           return pt()
   
 def manage_AddImageCollectionMDForm(self):  def manage_AddImageCollectionMDForm(self):
     """Nothing yet"""      """Nothing yet"""

Removed from v.1.72  
changed lines
  Added in v.1.77


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