Diff for /OSAS/OSA_system/OSAS_archiver.py between versions 1.1 and 1.11

version 1.1, 2003/12/18 17:22:28 version 1.11, 2004/03/03 13:02:54
Line 1 Line 1
 # Methoden und Klassen fuer den MPIWG Archiver  """ Methoden und Klassen fuer den MPIWG Archiver
   20040303 Zur Zeit nur angepasst and das System des MPIWG
   nächste schritte: Konfigurierbarkeit der Metadaten / Konfigurierbarkeit der Server
   
   """
   
 from OFS.Image import Image  from OFS.Image import Image
 from OFS.Folder import Folder  from OFS.Folder import Folder
Line 10  from Globals import InitializeClass Line 14  from Globals import InitializeClass
 from Globals import Persistent  from Globals import Persistent
 from Acquisition import Implicit  from Acquisition import Implicit
 from OSAS_show import *  from OSAS_show import *
   from OSAS_helpers import *
   from types import *
   
 import os.path  import os.path
 import os  import os
 import OSAS_ids  import OSAS_ids
 import archive #Baustelle  import archive #Baustelle
   import time
   
   class OSAS_archiveInbox(SimpleItem,Persistent,Implicit):
       """Inbox"""
   
       meta_type="OSAS_archiveInbox"
       pathes=[]
       
       def __init__(self,id,title):
           """init"""
           self.id=id
           self.title=title
           self.pathes=[]
   
       def addPath(self,path,RESPONSE=None):
           """add a path"""
           today=time.localtime()
           temp=self.pathes[0:]
           temp.append([path,today])
           self.pathes=temp[0:]
           if RESPONSE:
               RESPONSE.redirect("index_html")
   
       def index_html(self):
           """main"""
           pt=PageTemplateFile('Products/OSA_system/zpt/OSAS_archiveInboxIndex.zpt').__of__(self)
           return pt()
       
   def manage_AddOSAS_archiveInboxForm(self):
       """interface for adding the OSAS_root"""
       pt=PageTemplateFile('Products/OSA_system/zpt/AddOSAS_archiveInbox.zpt').__of__(self)
       return pt()
   
   
   def manage_AddOSAS_archiveInbox(self,id,title="",RESPONSE=None):
       """add the OSAS_root"""
       if title=="":
           title=id
           
       newObj=OSAS_archiveInbox(id, title)
       self._setObject(id,newObj)
       if RESPONSE is not None:
           RESPONSE.redirect('manage_main')
       
   
   
 class OSAS_metadataOrganizer(SimpleItem,Persistent,Implicit):  class OSAS_metadataOrganizer(SimpleItem,Persistent,Implicit):
     """Eingabe von Metadaten"""      """Eingabe von Metadaten"""
   
     meta_type="OSAS_metadataOrganizer"      meta_type="OSAS_metadataOrganizer"
       mediaTypes=["image","video","text","audio","data"]
       acquisitionTypes=["Image-Acquisition"]
       mediaToAcquisition={"image":"Image-Acquisition"}
       metaDataSets={'Image-Acquisition': [('device','opt'),('image-type','opt'),('production-comment','opt')]}
       imgData={'image':[('dpi','req')]}
       
       bibDataSets={'Book':[('author','opt'),('year','opt'),('title','opt'),('series editor','opt'),('series title','opt'),('series volume','opt'),('number of pages','opt'),('city','opt'),('publisher','opt'),('edition','opt'),('number of volumes','opt'),('translator','opt'),('ISBN ISSN','opt')],
                     'Journal Article':[('author','opt'),('year','opt'),('title','opt'),('journal','opt'),('volume','opt'),('issue','opt'),('pages','opt'),('alternate journal','opt'),('call number','opt')],
                     'Manuscript':[('author','opt'),('year','opt'),('title','opt'),('location','opt'),('signature','opt'),('pages','opt'),('editorial remarks','opt'),('description','opt'),('keywords','opt')]}
   
   
       referenceTypes=['Book','Journal Article','Manuscript']
   
     def __init__(self,id,title):      def __init__(self,id,title):
         """init"""          """init"""
Line 27  class OSAS_metadataOrganizer(SimpleItem, Line 90  class OSAS_metadataOrganizer(SimpleItem,
         self.title=title          self.title=title
         #self.acquisitionData=['provider_name','provider_address','provider_contact','provider_url','date','description']          #self.acquisitionData=['provider_name','provider_address','provider_contact','provider_url','date','description']
   
   
       def getName(self):
           """gives name from request session path"""
           path=self.REQUEST.SESSION['path']
           splitted=path.split("/")
           return splitted[len(splitted)-1]
           
       def addRessourceMeta(self,path=None,RESPONSE=None):
           """Metadaten fuer Ressource"""
           if not path:
               path=self.REQUEST.SESSION['path']
   
           else:
               self.REQUEST.SESSION['path']=path
   
           pt=PageTemplateFile('Products/OSA_system/zpt/inputRessourceData.zpt').__of__(self)
           return pt()
   
           
       def writeRessourceMetadata(self,name,date,description,creator,RESPONSE=None):
           """schreibe Resourcedata in index.meta"""
   
           path=self.REQUEST.SESSION['path']
   
           subnodes={}
           subnodes['name']=name
           subnodes['archive-creation-date']=date
           subnodes['creator']=creator       
           subnodes['description']=description
           
           changeNodesInIndexMeta(path,"",subnodes)
           self.inbox.addPath(self.REQUEST.SESSION['path'])
           RESPONSE.redirect(self.REQUEST['URL2'])
           
           
     def addAcquisition(self,path):      def addAcquisition(self,path):
         """Hinzufügen von Acquisition Daten"""          """Hinzufügen von Acquisition Daten"""
         self.REQUEST.SESSION['path']=path          self.REQUEST.SESSION['path']=path
         pt=PageTemplateFile('Products/OSA_system/inputAcquisitionData.zpt').__of__(self)          pt=PageTemplateFile('Products/OSA_system/zpt/inputAcquisitionData.zpt').__of__(self)
         return pt()          return pt()
   
     def writeAcquisitionMetadata(self,producer,date,path,description=""):  
       def writeAcquisitionMetadata(self,date,path,media_type,producer="mpiwg",description=""):
         """Schreibe Acquisiondata in index.meta"""          """Schreibe Acquisiondata in index.meta"""
                   
           
           #schreibe in index.meta
           subnodes={}
           subnodes['media-type']=media_type
           changeNodesInIndexMeta(path,"",subnodes)
           
           subnodes={}
           subnodes['date']=date
           subnodes['description']=description
           
           changeNodesInIndexMeta(path,"acquisition",subnodes)
           #print "HI"
   
           subnodes={}
           subnodes['provider-id']=producer
           subnodes['url']=getattr(self.producerFolder,producer).url
           subnodes['contact']=getattr(self.producerFolder,producer).contact
           subnodes['address']=getattr(self.producerFolder,producer).address
           
           changeNodesInIndexMeta(path,"provider",subnodes,parent="acquisition")
   
           
           self.metaDataSet=self.metaDataSets[self.mediaToAcquisition[media_type]]
           self.media_type=self.mediaToAcquisition[media_type]
           
           pt=PageTemplateFile('Products/OSA_system/zpt/inputDocumentMetadata.zpt').__of__(self)
           return pt()
   
           
       def writeDocumentMetadata(self,referenceType):
   
           """write document metadata"""
           form=self.REQUEST.form
   #schreibe in index.meta
           self.bibDataSet=self.bibDataSets[form['referenceType']]
           self.bibdata_type=form['referenceType']
   
           subnodes={}
           subnodes['device']=form['device']
           subnodes['image-type']=form['image-type']
           subnodes['production-comment']=form['production-comment']
           changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"image-acquisition",subnodes)
   
           subnodes={}
           subnodes['dpi']=form['dpi']
   
           
           changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"img",subnodes)
   
   
           pt=PageTemplateFile('Products/OSA_system/zpt/inputBiblioMetadata.zpt').__of__(self)
           return pt()
   
       def writeBiblioMetadata(self,bibdata_type,RESPONSE=None):
           """Write all"""
           #to do write metadata
   
           subnodes={}
           form=self.REQUEST.form
           #for key in form.keys():
           #    subnodes[key]=form['device']
           subnodes=form
           del subnodes['bibdata_type'] #in form but not metadata
           changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"bib",subnodes,nodeAttributes={'type':bibdata_type},parent="meta")
           #return self.REQUEST
           return self.addRessourceMeta()
           
       
   
 def manage_AddOSAS_metadataOrganizerForm(self):  def manage_AddOSAS_metadataOrganizerForm(self):
     """interface for adding the OSAS_root"""      """interface for adding the OSAS_root"""
     pt=PageTemplateFile('Products/OSA_system/AddOSAS_metadataOrganizer.zpt').__of__(self)      pt=PageTemplateFile('Products/OSA_system/zpt/AddOSAS_metadataOrganizer.zpt').__of__(self)
     return pt()      return pt()
   
   
Line 65  class OSAS_processViewer(SimpleItem,Pers Line 233  class OSAS_processViewer(SimpleItem,Pers
   
     def index_html(self):      def index_html(self):
         """main page"""          """main page"""
         pt=PageTemplateFile('Products/OSA_system/processViewerIndex.zpt').__of__(self)          pt=PageTemplateFile('Products/OSA_system/zpt/processViewerIndex.zpt').__of__(self)
         return pt()          return pt()
   
     def storeFile(self,something):      def storeFile(self,something):
Line 73  class OSAS_processViewer(SimpleItem,Pers Line 241  class OSAS_processViewer(SimpleItem,Pers
         self.REQUEST.SESSION['something']=something          self.REQUEST.SESSION['something']=something
         return 1          return 1
   
     def getFile(self):      def getFile(self,number):
         """get info from session"""          """get info from session"""
         return self.REQUEST.SESSION['something']          check=self.getoverview('/var/tmp/archiver').messages()[number]
           return check
   
     def getoverview(self,path):      def getoverview(self,path):
         """get overview"""          """get overview"""
Line 89  class OSAS_processViewer(SimpleItem,Pers Line 258  class OSAS_processViewer(SimpleItem,Pers
             
         return 'error?number=%i'%i          return 'error?number=%i'%i
   
     def view(self):      def geterror(self,str,context):
           session=context.REQUEST.SESSION
           return session[str]
   
   
       def readfile(self,path):
           
           ret=""
           f=open(path,'r')
           for g in f.readlines():
               ret=ret+g
           return ret
        
       def writefile(self,path,txt,REQUEST):
           """writefile"""
           f=open(path,'w')
           f.write(txt)
           f.close()
           rval=self.aq_acquire('archive2')
           return rval()
   
   
       def view(self,number):
         """view page"""          """view page"""
         pt=PageTemplateFile('Products/OSA_system/processViewerView.zpt').__of__(self)          self.errnum=number
           pt=PageTemplateFile('Products/OSA_system/zpt/processViewerView.zpt').__of__(self)
           return pt()
   
       def error(self):
           """view errors"""
           pt=PageTemplateFile('Products/OSA_system/zpt/processViewerError.zpt').__of__(self)
         return pt()          return pt()
           
 def manage_AddOSAS_processViewerForm(self):  def manage_AddOSAS_processViewerForm(self):
     """interface for adding the OSAS_processViewer"""      """interface for adding the OSAS_processViewer"""
     pt=PageTemplateFile('Products/OSA_system/AddOSAS_processViewer.zpt').__of__(self)      pt=PageTemplateFile('Products/OSA_system/zpt/AddOSAS_processViewer.zpt').__of__(self)
     return pt()      return pt()
   
   
Line 117  class OSAS_archiver(Folder, Persistent,I Line 314  class OSAS_archiver(Folder, Persistent,I
   
     meta_type="OSAS_archiver"      meta_type="OSAS_archiver"
   
     # to be deleted later      manage_options = Folder.manage_options+(
     #startPath="/mpiwg"          {'label':'Main Config','action':'changeOSAS_archiverForm'},
           )
        
       def unarchive(self,path):
           """unarchive the path"""
           f = os.popen("/usr/local/mpiwg/archive/unarchiver "+path,"r")
           return f.readlines()
   
       def checkIfUnarchive(self,path):
           if not os.path.exists(path+"/index.meta"):
               return 0
           f=file(path+"/index.meta","r").read()
           dom=xml.dom.minidom.parseString(f)
           archiveStorageDates=dom.getElementsByTagName("archive-storage-date")
           if archiveStorageDates:
               return 1
           else:
               return 0
   
     ## methoden aus dem alten archive.py      ## methoden aus dem alten archive.py
   
      
       def isArray(self,path):
           """check for array"""
           if type(path) == StringType:
               return 0
           else:
               return 1
           
     def archiver(self,path):      def archiver(self,path):
         """archive the documents in path"""          """archive the documents in path"""
         tmp=archive.archive(path,self.REQUEST.SESSION)          tmp=archive.archive(path,self.REQUEST.SESSION)
         pt=PageTemplateFile('Products/OSA_system/archiveStatus.zpt').__of__(self)          pt=PageTemplateFile('Products/OSA_system/zpt/archiveStatus.zpt').__of__(self)
         return pt()          return pt()
   
               def archive2(self):
           pt=PageTemplateFile('Products/OSA_system/zpt/archive2.zpt').__of__(self)
           return pt()
   
   
     def metachecker(self,path):      def metachecker(self,path):
         """check the metadata the documents in path"""          """check the metadata of the documents in path"""
         self.REQUEST.SESSION['path']=self.REQUEST['path']          self.REQUEST.SESSION['path']=self.REQUEST['path']
         return archive.metacheck(path)          return archive.metacheck(path)
   
Line 168  class OSAS_archiver(Folder, Persistent,I Line 393  class OSAS_archiver(Folder, Persistent,I
   
     def getfilesystem2(self,start,reload=0):      def getfilesystem2(self,start,reload=0):
     """load filesystem"""      """load filesystem"""
   
     k=filesystem2(start,1)      k=filesystem2(start,1)
     return k      return k
   
Line 188  class OSAS_archiver(Folder, Persistent,I Line 412  class OSAS_archiver(Folder, Persistent,I
   
     def archiver_html(self):      def archiver_html(self):
         """archiver"""          """archiver"""
         pt=PageTemplateFile('Products/OSA_system/OSAS_Archiver.zpt').__of__(self)          pt=PageTemplateFile('Products/OSA_system/zpt/OSAS_Archiver.zpt').__of__(self)
         return pt()          return pt()
   
     def index_html(self):      def index_html(self):
         """main page"""          """main page"""
         pt=PageTemplateFile('Products/OSA_system/archiverIndex.zpt').__of__(self)          pt=PageTemplateFile('Products/OSA_system/zpt/archiverIndex.zpt').__of__(self)
         return pt()          return pt()
           
       def getDate(self):
           """date"""
           return time.strftime("%Y-%m-%d",time.localtime())
       
     def newFolders_html(self):      def newFolders_html(self):
         """main page"""          """main page"""
         pt=PageTemplateFile('Products/OSA_system/newFolders.zpt').__of__(self)          pt=PageTemplateFile('Products/OSA_system/zpt/newFolders.zpt').__of__(self)
         return pt()          return pt()
   
     def getProducers(self):      def getProducers(self):
         """Ausgabe der registrierten Benutzer"""          """Ausgabe der registrierten Benutzer"""
         ret=[]          ret=[]
         #print self.aq_parent.__dict__          #x=7
           id=self.producerFolder.getId()
         for list in self.producerFolder.__dict__:          for list in self.producerFolder.__dict__:
             obj=getattr(self.producerFolder,list)              obj=getattr(self.producerFolder,list)
             if (hasattr(obj,"meta_type")):              if (hasattr(obj,"meta_type")):
Line 214  class OSAS_archiver(Folder, Persistent,I Line 443  class OSAS_archiver(Folder, Persistent,I
   
     def getProducer(self,id):      def getProducer(self,id):
         """Gebe ProducerObjekt zurück"""          """Gebe ProducerObjekt zurück"""
         obj=getattr(self.aq_parent.producerFolder,id)          obj=getattr(self.producerFolder,id)
         return obj          return obj
                   
                   
Line 223  class OSAS_archiver(Folder, Persistent,I Line 452  class OSAS_archiver(Folder, Persistent,I
         """Erzeuge Folder im producer Verzeichnis mit ids"""          """Erzeuge Folder im producer Verzeichnis mit ids"""
         self.REQUEST.SESSION['producer']=producer          self.REQUEST.SESSION['producer']=producer
         self.REQUEST.SESSION['ids']=self.idGenerator.giveIdsOut(number)          self.REQUEST.SESSION['ids']=self.idGenerator.giveIdsOut(number)
         pt=PageTemplateFile('Products/OSA_system/createFoldersForm.zpt').__of__(self)          pt=PageTemplateFile('Products/OSA_system/zpt/createFoldersForm.zpt').__of__(self)
         return pt()          return pt()
           
     def createFolders(self,folderList,producer):      def createFolders(self,folderList,producer):
         """Erzeug die entsprechenden Folder"""          """Erzeug die entsprechenden Folder"""
         for folder in folderList:          #hack
             os.mkdir(self.startPath+"/"+producer+"/"+folder)          #producer="library"
         self.REQUEST.SESSION['folderList']=folderList          if type(folderList)==StringType:
         pt=PageTemplateFile('Products/OSA_system/createFolders.zpt').__of__(self)              folders=[folderList]
           else:
               folders=folderList
           #return producer
           producerFolderName=self.getProducer(producer).producerFolderName
           
           for folder in folders:
               os.mkdir(self.startPath+"/"+producerFolderName+"/"+folder)
               os.chmod(self.startPath+"/"+producerFolderName+"/"+folder,0775)
           self.REQUEST.SESSION['folderList']=folders
           pt=PageTemplateFile('Products/OSA_system/zpt/createFolders.zpt').__of__(self)
         return pt()          return pt()
   
       def storeerror(self,ret,path,context,i):
           """store an error"""
           session=context.REQUEST.SESSION
           session['error%i'%i]=ret
           session['path%i'%i]=path
        
           return 'error?number=%i'%i
   
       def geterror(self,str,context):
           session=context.REQUEST.SESSION
           return session[str]
   
       def readfile(self,path):
           
           ret=""
           f=open(path,'r')
           for g in f.readlines():
               ret=ret+g
           return ret
        
       def writefile(self,path,txt,REQUEST):
           """writefile"""
           f=open(path,'w')
           f.write(txt)
           f.close()
           return self.archive2()
   
       def error(self):
           """view errors"""
           pt=PageTemplateFile('Products/OSA_system/zpt/processViewerError.zpt').__of__(self)
           return pt()
   
       
     def archiveSelected(self):      def archiveSelected(self):
         """Archiviere ausgewaehlte files"""          """Archiviere ausgewaehlte files"""
         pt=PageTemplateFile('Products/OSA_system/archiveSelected.zpt').__of__(self)          pt=PageTemplateFile('Products/OSA_system/zpt/archiveSelected.zpt').__of__(self)
         return pt()          return pt()
   
     def enterAcquisitionMetadata(self):      def enterAcquisitionMetadata(self):
Line 249  class OSAS_archiver(Folder, Persistent,I Line 521  class OSAS_archiver(Folder, Persistent,I
         """Anzeige der noch zu archivieren Files"""          """Anzeige der noch zu archivieren Files"""
   
                   
       def changeOSAS_archiverForm(self):
           """change"""
           pt=PageTemplateFile('Products/OSA_system/zpt/ChangeOSAS_archiver.zpt').__of__(self)
           return pt()
   
       def changeOSAS_archiver(self,startPath,title="",RESPONSE=None):
           """change"""
           self.startPath=startPath
           self.title=title
   
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
           
   
 def manage_AddOSAS_archiverForm(self):  def manage_AddOSAS_archiverForm(self):
     """interface for adding the OSAS_root"""      """interface for adding the OSAS_root"""
     pt=PageTemplateFile('Products/OSA_system/AddOSAS_archiver.zpt').__of__(self)      pt=PageTemplateFile('Products/OSA_system/zpt/AddOSAS_archiver.zpt').__of__(self)
     return pt()      return pt()
   
   
Line 269  def manage_AddOSAS_archiver(self,id,star Line 552  def manage_AddOSAS_archiver(self,id,star
         RESPONSE.redirect('manage_main')          RESPONSE.redirect('manage_main')
   
   
 class OSAS_producer(Image,Persistent,Implicit):  class OSAS_producer(SimpleItem,Persistent,Implicit):
     """Klasse fuer Produzenteninformationen"""      """Klasse fuer Produzenteninformationen
       Metadaten nach  V1.1.1"""
   
     meta_type="OSAS_producer"      meta_type="OSAS_producer"
   
     def __init__(self,shortName,fullName):      def __init__(self,shortName,fullName,producerFolderName,address="",url="",contact=""):
   
         self.id=shortName          self.id=shortName
         self.title=fullName          self.title=fullName
           self.address=address
           self.url=url
           self.contact=contact
           self.producerFolderName=producerFolderName
           
       manage_options = SimpleItem.manage_options+(
           {'label':'Main Config','action':'changeOSAS_producerForm'},
           )
   
       def changeOSAS_producerForm(self):
           """change"""
           pt=PageTemplateFile('Products/OSA_system/zpt/ChangeOSAS_producer.zpt').__of__(self)
           return pt()
   
       def changeOSAS_producer(self,title,address,producerFolderName,contact="",url="",RESPONSE=None):
           """change"""
           self.title=title
           self.address=address
           self.url=url
           self.contact=contact
           self.producerFolderName=producerFolderName
   
           if RESPONSE:
               RESPONSE.redirect("manage_main")
   
 def manage_AddOSAS_producerForm(self):  def manage_AddOSAS_producerForm(self):
     """interface for adding the OSAS_root"""      """interface for adding the OSAS_root"""
     pt=PageTemplateFile('Products/OSA_system/AddOSAS_producer.zpt').__of__(self)      pt=PageTemplateFile('Products/OSA_system/zpt/AddOSAS_producer.zpt').__of__(self)
     return pt()      return pt()
   
   
 def manage_AddOSAS_producer(self,id,title="",RESPONSE=None):  def manage_AddOSAS_producer(self,id,producerFolderName,title="",contact="",address="",url="",RESPONSE=None):
     """add the OSAS_root"""      """add the OSAS_root"""
     if title=="":      if title=="":
         title=id          title=id
                   
     newObj=OSAS_producer(id, title)      newObj=OSAS_producer(id, title,producerFolderName,address,contact,url)
     self._setObject(id,newObj)      self._setObject(id,newObj)
     if RESPONSE is not None:      if RESPONSE is not None:
         RESPONSE.redirect('manage_main')          RESPONSE.redirect('manage_main')

Removed from v.1.1  
changed lines
  Added in v.1.11


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