Diff for /ImageArchive/ImageArchive.py between versions 1.42 and 1.47

version 1.42, 2004/12/23 14:08:05 version 1.47, 2005/03/18 13:16:10
Line 13  import operator Line 13  import operator
 import tempfile  import tempfile
 import shutil  import shutil
 from types import *  from types import *
   import time
   
 try:  try:
     from Products.ECHO_content.ECHO_collection import ECHO_basis      from Products.ECHO_content.ECHO_collection import ECHO_basis
Line 21  except: Line 21  except:
     print "ECHO Elements not imported"      print "ECHO Elements not imported"
     class ECHO_basis:      class ECHO_basis:
         """leer"""          """leer"""
   
         manage_options=()          manage_options=()
   
   
Line 38  def getText(nodelist): Line 39  def getText(nodelist):
            rc = rc + node.data             rc = rc + node.data
     return rc      return rc
   
   def getTextFromNode(nodename):
       nodelist=nodename.childNodes
       rc = ""
       for node in nodelist:
           if node.nodeType == node.TEXT_NODE:
              rc = rc + node.data
       return rc
   
   class metaData(SimpleItem):
       """Klasse fuer metadaten"""
       meta_type="metaData"
       
       def __init__(self,xmlurl,container=None):
           """__init__"""
           return self.update(xmlurl,container)
   
   
       def update(self,xmlurl,container=None):
           """update"""
   
           try:
               xmlfh=urllib.urlopen(xmlurl)
               dom=xml.dom.minidom.parse(xmlfh)
           except:
               return None
   
           md=dom.getElementsByTagName(container)
           mlist=[]
           if md:
               for node in md[0].childNodes:
                   if node.nodeType==dom.ELEMENT_NODE:
                       name=node.tagName
                       content=getTextFromNode(node)
                       setattr(self,name,content)
                       mlist.append(name)
               self.mlist=mlist[0:]
           else:
               self.mlist=[]
           
       def index_html(self):
           """index"""
           ret="<html><body>"
           for tag in self.mlist:
               ret+="<p>%s=%s</p>"%(tag,getattr(self,tag))
           return ret+"</body></html>"
                   
   
 class ImageDigilib(Folder,Persistent,Implicit):  class ImageDigilib(Folder,Persistent,Implicit):
     """Anzeige object fuer digilib"""      """Anzeige object fuer digilib"""
Line 84  class ImageDigilib(Folder,Persistent,Imp Line 131  class ImageDigilib(Folder,Persistent,Imp
         """ausgabe der metadaten"""          """ausgabe der metadaten"""
         return self.meta          return self.meta
           
       def manageMetaData(self,strict=None):
           """create or updateMetadata"""
           
           md=self.ZopeFind(self,obj_metatypes=["metaData"])
           
           if not md:
               self._setObject("metaData",metaData(self.meta,"ROW"))
   
           else:
               if not strict:
                   md[0][1].update(self.meta,"ROW")
               else:
                   print "strict"
                   if len(md[0][1].mlist)==0:
                       print " +++",self.getId()
                       md[0][1].update(self.meta,"ROW")
                   else:
                       print " ---",self.getId()
                       
     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
Line 126  class ImageDigilib(Folder,Persistent,Imp Line 192  class ImageDigilib(Folder,Persistent,Imp
                   
     self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%filename)      self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%filename)
     self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")      self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
     image=urllib.urlopen(path).read()          #print path
     self.REQUEST.RESPONSE.write(image)      imagefh=urllib.urlopen(path,'rb')
           
       self.REQUEST.RESPONSE.write(imagefh.read())
     self.REQUEST.RESPONSE.close()      self.REQUEST.RESPONSE.close()
         #return self.REQUEST.RESPONSE.redirect(path)          #return self.REQUEST.RESPONSE.redirect(path)
   
Line 136  class ImageDigilib(Folder,Persistent,Imp Line 204  class ImageDigilib(Folder,Persistent,Imp
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','upDateImageForm.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','upDateImageForm.zpt')).__of__(self)
         return pt()                  return pt()        
   
     def updateImage(self,file,RESPONSE):      def renameImageForm(self):
           """form"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','renameImageForm.zpt')).__of__(self)
           return pt()
   
       def renameImage(self,newname,RESPONSE=None):
           """umbenennen"""
           #umbennen des files im folder
           oldname=self.getId()
           self.aq_parent.manage_renameObjects(ids=[oldname],new_ids=[newname])
           self.title=newname[0:]
               self.filename=newname[0:]   
               #umbennen des files auf dem server
           oldpath=os.path.join(self.ImageStoragePath,oldname)
           newpath=os.path.join(self.ImageStoragePath,newname)
               os.rename(oldpath,newpath)
           
           #umbenennen des versionsfolders
           oldfolder=os.path.join(self.ImageStoragePath,"."+oldname+".dir")
               newfolder=os.path.join(self.ImageStoragePath,"."+newname+".dir")
           if os.path.exists(oldfolder):
                   os.rename(oldfolder,newfolder)
               else:
                   os.mkdir(newfolder)
                   
           #schreibe info uber umbennenung
   
               renameName=os.path.join(newfolder,"renamed")
               if os.path.exists(renameName):
                   fh=file(renameName,'a')
               else:
                   fh=file(renameName,'w')
   
               tm=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
               try:
                   user=self.REQUEST['AUTHENTICATED_USER']
               except:
                   user="unknown"
   
               str="""%s %s %s %s\n"""%(tm,user,oldname,newname)
               fh.write(str)
               fh.close()
               
               #scale thumb
       
           self.scaleThumbs()
           
           #scale standard
   
           self.scaleWorkingVersions()
   
   
               if RESPONSE:
               RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
       
   
       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())
         path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")          path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")
         print "path",path          
         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)
Line 174  class ImageDigilib(Folder,Persistent,Imp Line 298  class ImageDigilib(Folder,Persistent,Imp
   
         self.scaleWorkingVersions()          self.scaleWorkingVersions()
   
           if rename:
           self.renameImage(file.filename)
       
       
         if RESPONSE:          if RESPONSE:
             RESPONSE.redirect(self.absolute_url())              RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
       
           
         return "done"          return "done"
                   
     def thumb(self):      def thumb(self,url=None):
         """show thumb"""          """show thumb"""
         thumbname=os.path.splitext(self.filename)[0]+".jpg"          thumbname=os.path.splitext(self.filename)[0]+".jpg"
         ## if not os.path.exists("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname):          ## if not os.path.exists("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname):
Line 194  class ImageDigilib(Folder,Persistent,Imp Line 323  class ImageDigilib(Folder,Persistent,Imp
         path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+"&dw=100&dh=100&mo=lores"          path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+"&dw=100&dh=100&mo=lores"
         #path="/mpiwg/online/"+self.ImageViewerPath+"/"+thumbname          #path="/mpiwg/online/"+self.ImageViewerPath+"/"+thumbname
         self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path          self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path
           if url:
               return "<img border=\"0\" src=\"%s\">"% path
           else:
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumb.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumb.zpt')).__of__(self)
         return pt()          return pt()
           
Line 432  class ImageCollection(Folder, Persistent Line 564  class ImageCollection(Folder, Persistent
     manage_options = optTMP+(      manage_options = optTMP+(
         {'label':'Main Config','action':'ImageCollection_config'},          {'label':'Main Config','action':'ImageCollection_config'},
         {'label':'Import','action':'ImportFiles'},          {'label':'Import','action':'ImportFiles'},
         {'label':'Recalculate Metadata','action':'recalculateMeta'},          {'label':'Recalculate MetadataLink','action':'recalculateMetaLink'},
         {'label':'Import Metadata','action':'importMetaForm'},          {'label':'Import Metadata File','action':'importMetaFileForm'},
           {'label':'Import Metadata','action':'importMetaData'},
         {'label':'Rescale thumbs','action':'scaleThumbs'},          {'label':'Rescale thumbs','action':'scaleThumbs'},
     {'label':'Rescale working version','action':'scaleWorkingVersions'},      {'label':'Rescale working version','action':'scaleWorkingVersions'},
         )          )
   
           
                   
     def importMetaForm(self):      def importMetaData(self,strict=None):
           """import metadata, if strict ist not None then only metadata will be rebuild where metadata is empty"""
           
           for image in self.ZopeFind(self,obj_metatypes=["ImageDigilib"]):
               print image[1].getId()
               image[1].manageMetaData(strict)
           return "ok"
           
   
       def importMetaFileForm(self):
         """import metadata"""          """import metadata"""
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','importMeta.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','importMeta.zpt')).__of__(self)
         return pt()          return pt()
   
     def importMeta(self,fileupload,tag):      def importMetaFile(self,fileupload,tag):
         """import"""          """import"""
         filedata=fileupload.read()          filedata=fileupload.read()
         dom=xml.dom.minidom.parseString(filedata)          dom=xml.dom.minidom.parseString(filedata)
Line 532  class ImageCollection(Folder, Persistent Line 674  class ImageCollection(Folder, Persistent
                   
     def meta_default(self,filename):      def meta_default(self,filename):
         """url der metadaten"""          """url der metadaten"""
         return self.defaultMetaString % filename          return self.defaultMetaString % urllib.quote(filename)
                                             
     def getThumbAttribute(self,id,attr):      def getThumbAttribute(self,id,attr):
         if hasattr(self,id):          if hasattr(self,id):
Line 593  class ImageCollection(Folder, Persistent Line 735  class ImageCollection(Folder, Persistent
         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)
         return pt()                  return pt()        
   
     def recalculateMeta(self):      def recalculateMetaLink(self):
         """recalculate the metadata"""          """recalculate the metadata"""
                   
         for entryid in self.__dict__:          for entryid in self.__dict__:
Line 714  class ImageCollection(Folder, Persistent Line 856  class ImageCollection(Folder, Persistent
   
     def show_selected_thumbs(self):      def show_selected_thumbs(self):
         #ids=[]          #ids=[]
                   try:
         return self.REQUEST.SESSION['filenames']          return self.REQUEST.SESSION['filenames']
       except:
        return None
     def show_thumbs(self):      def show_thumbs(self):
         ids=[]          ids=[]
         for entry in self.__dict__:          for entry in self.__dict__:
Line 855  class ImageCollection(Folder, Persistent Line 998  class ImageCollection(Folder, Persistent
     def show_thumbs_selected_rows(self,numberOfColumns):      def show_thumbs_selected_rows(self,numberOfColumns):
         """Ausgabe anzahl"""          """Ausgabe anzahl"""
         ids=self.show_selected_thumbs()          ids=self.show_selected_thumbs()
           if not ids:
           return None
         self.REQUEST.SESSION['ids']=ids          self.REQUEST.SESSION['ids']=ids
         number=int(len(ids)/numberOfColumns)+1          number=int(len(ids)/numberOfColumns)+1
         self.REQUEST.SESSION['number']=range(number)          self.REQUEST.SESSION['number']=range(number)
Line 925  class ImageCollection(Folder, Persistent Line 1070  class ImageCollection(Folder, Persistent
             return 0              return 0
         if self.REQUEST.SESSION.has_key("filename"):          if self.REQUEST.SESSION.has_key("filename"):
             filename=self.REQUEST.SESSION["filename"]              filename=self.REQUEST.SESSION["filename"]
                           filename=self.getImageByName(filename,onlyName="yes")
                                   
             try:              try:
                 startId=filename                  startId=filename
Line 1018  class ImageCollection(Folder, Persistent Line 1163  class ImageCollection(Folder, Persistent
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected2.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected2.zpt')).__of__(self)
         return pt()            return pt()  
                   
       def getImageByName(self,filename,onlyName=None):
           """get filename"""
           
           fn=getattr(self,filename,None)
           if not fn:
               filenameM=filename.split(".")[0]
               founds=self.ZopeFind(self,obj_metatypes=['ImageDigilib'])
               for found in founds:
                   foundM=found[0].split(".")[0]
                   if filenameM.lower()==foundM.lower():
                       if onlyName:
                           return found[0]
                       else:
                           return found[1]
           if onlyName:
               return filename
           else:
               return fn
     def index_html(self):      def index_html(self):
         """main template collection"""          """main template collection"""
         if self.REQUEST.has_key('filename'):          if self.REQUEST.has_key('filename'):

Removed from v.1.42  
changed lines
  Added in v.1.47


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