File:  [Repository] / OSAS / OSA_system / OSAS_archiver.py
Revision 1.12: download - view: text, annotated - select for diffs - revision graph
Wed May 4 14:06:31 2005 UTC (19 years, 2 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
2.7 anpassungen im archiver2.7 anpassungen im archiver

    1: """ Methoden und Klassen fuer den MPIWG Archiver
    2: 20040303 Zur Zeit nur angepasst and das System des MPIWG
    3: nächste schritte: Konfigurierbarkeit der Metadaten / Konfigurierbarkeit der Server
    4: 
    5: """
    6: 
    7: from OFS.Image import Image
    8: from OFS.Folder import Folder
    9: from OFS.SimpleItem import SimpleItem
   10: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
   11: from Products.PageTemplates.PageTemplate import PageTemplate
   12: from AccessControl import ClassSecurityInfo
   13: from Globals import InitializeClass,Persistent,package_home
   14: from Acquisition import Implicit
   15: from OSAS_show import *
   16: from OSAS_helpers import *
   17: from types import *
   18: 
   19: import os.path
   20: import os
   21: import OSAS_ids
   22: import archive #Baustelle
   23: import time
   24: 
   25: class OSAS_archiveInbox(SimpleItem,Persistent,Implicit):
   26:     """Inbox"""
   27: 
   28:     meta_type="OSAS_archiveInbox"
   29:     pathes=[]
   30:     
   31:     def __init__(self,id,title):
   32:         """init"""
   33:         self.id=id
   34:         self.title=title
   35:         self.pathes=[]
   36: 
   37:     def addPath(self,path,RESPONSE=None):
   38:         """add a path"""
   39:         today=time.localtime()
   40:         temp=self.pathes[0:]
   41:         temp.append([path,today])
   42:         self.pathes=temp[0:]
   43:         if RESPONSE:
   44:             RESPONSE.redirect("index_html")
   45: 
   46:     def index_html(self):
   47:         """main"""
   48:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','OSAS_archiveInboxIndex.zpt')).__of__(self)
   49:         return pt()
   50:     
   51: def manage_AddOSAS_archiveInboxForm(self):
   52:     """interface for adding the OSAS_root"""
   53:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_archiveInbox.zpt')).__of__(self)
   54:     return pt()
   55: 
   56: 
   57: def manage_AddOSAS_archiveInbox(self,id,title="",RESPONSE=None):
   58:     """add the OSAS_root"""
   59:     if title=="":
   60:         title=id
   61:         
   62:     newObj=OSAS_archiveInbox(id, title)
   63:     self._setObject(id,newObj)
   64:     if RESPONSE is not None:
   65:         RESPONSE.redirect('manage_main')
   66:     
   67: 
   68: 
   69: class OSAS_metadataOrganizer(SimpleItem,Persistent,Implicit):
   70:     """Eingabe von Metadaten"""
   71: 
   72:     meta_type="OSAS_metadataOrganizer"
   73:     mediaTypes=["image","video","text","audio","data"]
   74:     acquisitionTypes=["Image-Acquisition"]
   75:     mediaToAcquisition={"image":"Image-Acquisition"}
   76:     metaDataSets={'Image-Acquisition': [('device','opt'),('image-type','opt'),('production-comment','opt')]}
   77:     imgData={'image':[('dpi','req')]}
   78:     
   79:     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')],
   80:                   'Journal Article':[('author','opt'),('year','opt'),('title','opt'),('journal','opt'),('volume','opt'),('issue','opt'),('pages','opt'),('alternate journal','opt'),('call number','opt')],
   81:                   'Manuscript':[('author','opt'),('year','opt'),('title','opt'),('location','opt'),('signature','opt'),('pages','opt'),('editorial remarks','opt'),('description','opt'),('keywords','opt')]}
   82: 
   83: 
   84:     referenceTypes=['Book','Journal Article','Manuscript']
   85: 
   86:     def __init__(self,id,title):
   87:         """init"""
   88:         self.id=id
   89:         self.title=title
   90:         #self.acquisitionData=['provider_name','provider_address','provider_contact','provider_url','date','description']
   91: 
   92: 
   93:     def getName(self):
   94:         """gives name from request session path"""
   95:         path=self.REQUEST.SESSION['path']
   96:         splitted=path.split("/")
   97:         return splitted[len(splitted)-1]
   98:         
   99:     def addRessourceMeta(self,path=None,RESPONSE=None):
  100:         """Metadaten fuer Ressource"""
  101:         if not path:
  102:             path=self.REQUEST.SESSION['path']
  103: 
  104:         else:
  105:             self.REQUEST.SESSION['path']=path
  106: 
  107:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','inputRessourceData.zpt')).__of__(self)
  108:         return pt()
  109: 
  110:         
  111:     def writeRessourceMetadata(self,name,date,description,creator,RESPONSE=None):
  112:         """schreibe Resourcedata in index.meta"""
  113: 
  114:         path=self.REQUEST.SESSION['path']
  115: 
  116:         subnodes={}
  117:         subnodes['name']=name
  118:         subnodes['archive-creation-date']=date
  119:         subnodes['creator']=creator       
  120:         subnodes['description']=description
  121:         
  122:         changeNodesInIndexMeta(path,"",subnodes)
  123:         self.inbox.addPath(self.REQUEST.SESSION['path'])
  124:         RESPONSE.redirect(self.REQUEST['URL2'])
  125:         
  126:         
  127:     def addAcquisition(self,path):
  128:         """Hinzufügen von Acquisition Daten"""
  129:         self.REQUEST.SESSION['path']=path
  130:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','inputAcquisitionData.zpt')).__of__(self)
  131:         return pt()
  132: 
  133: 
  134:     def writeAcquisitionMetadata(self,date,path,media_type,producer="mpiwg",description=""):
  135:         """Schreibe Acquisiondata in index.meta"""
  136:         
  137:         
  138:         #schreibe in index.meta
  139:         subnodes={}
  140:         subnodes['media-type']=media_type
  141:         changeNodesInIndexMeta(path,"",subnodes)
  142:         
  143:         subnodes={}
  144:         subnodes['date']=date
  145:         subnodes['description']=description
  146:         
  147:         changeNodesInIndexMeta(path,"acquisition",subnodes)
  148:         #print "HI"
  149: 
  150:         subnodes={}
  151:         subnodes['provider-id']=producer
  152:         subnodes['url']=getattr(self.producerFolder,producer).url
  153:         subnodes['contact']=getattr(self.producerFolder,producer).contact
  154:         subnodes['address']=getattr(self.producerFolder,producer).address
  155:         
  156:         changeNodesInIndexMeta(path,"provider",subnodes,parent="acquisition")
  157: 
  158:         
  159:         self.metaDataSet=self.metaDataSets[self.mediaToAcquisition[media_type]]
  160:         self.media_type=self.mediaToAcquisition[media_type]
  161:         
  162:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','inputDocumentMetadata.zpt')).__of__(self)
  163:         return pt()
  164: 
  165:         
  166:     def writeDocumentMetadata(self,referenceType):
  167: 
  168:         """write document metadata"""
  169:         form=self.REQUEST.form
  170: #schreibe in index.meta
  171:         self.bibDataSet=self.bibDataSets[form['referenceType']]
  172:         self.bibdata_type=form['referenceType']
  173: 
  174:         subnodes={}
  175:         subnodes['device']=form['device']
  176:         subnodes['image-type']=form['image-type']
  177:         subnodes['production-comment']=form['production-comment']
  178:         changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"image-acquisition",subnodes)
  179: 
  180:         subnodes={}
  181:         subnodes['dpi']=form['dpi']
  182: 
  183:         
  184:         changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"img",subnodes)
  185: 
  186: 
  187:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','inputBiblioMetadata.zpt')).__of__(self)
  188:         return pt()
  189: 
  190:     def writeBiblioMetadata(self,bibdata_type,RESPONSE=None):
  191:         """Write all"""
  192:         #to do write metadata
  193: 
  194:         subnodes={}
  195:         form=self.REQUEST.form
  196:         #for key in form.keys():
  197:         #    subnodes[key]=form['device']
  198:         subnodes=form
  199:         del subnodes['bibdata_type'] #in form but not metadata
  200:         changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"bib",subnodes,nodeAttributes={'type':bibdata_type},parent="meta")
  201:         #return self.REQUEST
  202:         return self.addRessourceMeta()
  203:         
  204:     
  205: 
  206: def manage_AddOSAS_metadataOrganizerForm(self):
  207:     """interface for adding the OSAS_root"""
  208:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_metadataOrganizer.zpt')).__of__(self)
  209:     return pt()
  210: 
  211: 
  212: def manage_AddOSAS_metadataOrganizer(self,id,title="",RESPONSE=None):
  213:     """add the OSAS_root"""
  214:     if title=="":
  215:         title=id
  216:         
  217:     newObj=OSAS_metadataOrganizer(id, title)
  218:     self._setObject(id,newObj)
  219:     if RESPONSE is not None:
  220:         RESPONSE.redirect('manage_main')
  221:     
  222: 
  223: class OSAS_processViewer(SimpleItem,Persistent,Implicit):
  224:     """Process viewer for archiving"""
  225: 
  226:     meta_type="OSAS_processViewer"
  227: 
  228:     def __init__(self, id, title):
  229:         """init"""
  230:         self.id=id
  231:         self.title=title
  232: 
  233:     def index_html(self):
  234:         """main page"""
  235:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','processViewerIndex.zpt')).__of__(self)
  236:         return pt()
  237: 
  238:     def storeFile(self,something):
  239:         """store info in session"""
  240:         self.REQUEST.SESSION['something']=something
  241:         return 1
  242: 
  243:     def getFile(self,number):
  244:         """get info from session"""
  245:         check=self.getoverview('/var/tmp/archiver').messages()[number]
  246:         return check
  247: 
  248:     def getoverview(self,path):
  249:         """get overview"""
  250:         return archive.overview(path)
  251: 
  252:     def storeerror(self,ret,path,context,i):
  253:         """store an error"""
  254:         session=context.REQUEST.SESSION
  255:         session['error%i'%i]=ret
  256:         session['path%i'%i]=path
  257:      
  258:         return 'error?number=%i'%i
  259: 
  260:     def geterror(self,str,context):
  261:         session=context.REQUEST.SESSION
  262:         return session[str]
  263: 
  264: 
  265:     def readfile(self,path):
  266:         
  267:         ret=""
  268:         f=open(path,'r')
  269:         for g in f.readlines():
  270:             ret=ret+g
  271:         return ret
  272:      
  273:     def writefile(self,path,txt,REQUEST):
  274:         """writefile"""
  275:         f=open(path,'w')
  276:         f.write(txt)
  277:         f.close()
  278:         rval=self.aq_acquire('archive2')
  279:         return rval()
  280: 
  281: 
  282:     def view(self,number):
  283:         """view page"""
  284:         self.errnum=number
  285:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','processViewerView.zpt')).__of__(self)
  286:         return pt()
  287: 
  288:     def error(self):
  289:         """view errors"""
  290:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','processViewerError.zpt')).__of__(self)
  291:         return pt()
  292:     
  293: def manage_AddOSAS_processViewerForm(self):
  294:     """interface for adding the OSAS_processViewer"""
  295:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_processViewer.zpt')).__of__(self)
  296:     return pt()
  297: 
  298: 
  299: def manage_AddOSAS_processViewer(self,id,title="",RESPONSE=None):
  300:     """add the OSAS_processViewer"""
  301:     if title=="":
  302:         title=id
  303:         
  304:     newObj=OSAS_processViewer(id, title)
  305:     self._setObject(id,newObj)
  306:     if RESPONSE is not None:
  307:         RESPONSE.redirect('manage_main')
  308: 
  309: 
  310: 
  311: class OSAS_archiver(Folder, Persistent,Implicit):
  312:     """Hauptklasse fuer das Archiv"""
  313: 
  314:     meta_type="OSAS_archiver"
  315: 
  316:     manage_options = Folder.manage_options+(
  317:         {'label':'Main Config','action':'changeOSAS_archiverForm'},
  318:         )
  319:      
  320:     def unarchive(self,path):
  321:         """unarchive the path"""
  322:         f = os.popen("/usr/local/mpiwg/archive/unarchiver "+path,"r")
  323:         return f.readlines()
  324: 
  325:     def checkIfUnarchive(self,path):
  326:         if not os.path.exists(path+"/index.meta"):
  327:             return 0
  328:         f=file(path+"/index.meta","r").read()
  329:         dom=xml.dom.minidom.parseString(f)
  330:         archiveStorageDates=dom.getElementsByTagName("archive-storage-date")
  331:         if archiveStorageDates:
  332:             return 1
  333:         else:
  334:             return 0
  335: 
  336:     ## methoden aus dem alten archive.py
  337: 
  338:    
  339:     def isArray(self,path):
  340:         """check for array"""
  341:         if type(path) == StringType:
  342:             return 0
  343:         else:
  344:             return 1
  345:         
  346:     def archiver(self,path):
  347:         """archive the documents in path"""
  348:         tmp=archive.archive(path,self.REQUEST.SESSION)
  349:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','archiveStatus.zpt')).__of__(self)
  350:         return pt()
  351: 
  352:     def archive2(self):
  353:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','archive2.zpt')).__of__(self)
  354:         return pt()
  355: 
  356: 
  357:     def metachecker(self,path):
  358:         """check the metadata of the documents in path"""
  359:         self.REQUEST.SESSION['path']=self.REQUEST['path']
  360:         return archive.metacheck(path)
  361: 
  362:     ## methods  from OSAS_show
  363:     def changeName(self,name):
  364:         return changeName(name)
  365: 
  366:     def hasMetafile(self,path):
  367:         return hasMetafile(path)
  368: 
  369:     def getMetafile(self,path):
  370:         return getMetafile(path)
  371: 
  372:     def toggle_view(self,path,file):
  373:         """Oeffnen bzw. schließen der Subfolders"""
  374:         self.tree(path).toggle(path,file)
  375:         return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"?path="+path)
  376: 
  377: 
  378: 
  379:     def isdigilib2(self,path):
  380:         """check if digilib"""
  381:         return isdigilib2(path)
  382: 
  383:     def path_to_link_view(self,path):
  384:         """generates navigation bar for viewfiles"""
  385:         return path_to_link_view(self.REQUEST['URL'],path)
  386:     
  387: 
  388:     def tree(self,start):
  389: 	"""get the filetree"""
  390: 	k=browse(start)
  391: 	return k
  392: 
  393:     def getfilesystem2(self,start,reload=0):
  394: 	"""load filesystem"""
  395: 	k=filesystem2(start,1)
  396: 	return k
  397: 
  398:     def getfilesystem(self,start,reload=0):
  399: 	"""load filesystem"""
  400: 
  401: 	k=filesystem(start,1)
  402: 	return k
  403: 
  404: 
  405:     ##init
  406:     def __init__(self, id, title,startPath):
  407:         """init"""
  408:         self.id=id
  409:         self.title=title
  410:         self.startPath=startPath
  411: 
  412:     def archiver_html(self):
  413:         """archiver"""
  414:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','OSAS_Archiver.zpt')).__of__(self)
  415:         return pt()
  416: 
  417:     def index_html(self):
  418:         """main page"""
  419:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','archiverIndex.zpt')).__of__(self)
  420:         return pt()
  421: 
  422:     def getDate(self):
  423:         """date"""
  424:         return time.strftime("%Y-%m-%d",time.localtime())
  425:     
  426:     def newFolders_html(self):
  427:         """main page"""
  428:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','newFolders.zpt')).__of__(self)
  429:         return pt()
  430: 
  431:     def getProducers(self):
  432:         """Ausgabe der registrierten Benutzer"""
  433:         ret=[]
  434:         #x=7
  435:         id=self.producerFolder.getId()
  436:         for list in self.producerFolder.__dict__:
  437:             obj=getattr(self.producerFolder,list)
  438:             if (hasattr(obj,"meta_type")):
  439:                 if (obj.meta_type=="OSAS_producer"):
  440:                     ret.append(obj.getId())
  441:         return ret
  442: 
  443:     def getProducer(self,id):
  444:         """Gebe ProducerObjekt zurück"""
  445:         obj=getattr(self.producerFolder,id)
  446:         return obj
  447:         
  448:         
  449: 
  450:     def createFoldersForm(self,producer,number):
  451:         """Erzeuge Folder im producer Verzeichnis mit ids"""
  452:         self.REQUEST.SESSION['producer']=producer
  453:         self.REQUEST.SESSION['ids']=self.idGenerator.giveIdsOut(number)
  454:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','createFoldersForm.zpt')).__of__(self)
  455:         return pt()
  456:     
  457:     def createFolders(self,folderList,producer):
  458:         """Erzeug die entsprechenden Folder"""
  459:         #hack
  460:         #producer="library"
  461:         if type(folderList)==StringType:
  462:             folders=[folderList]
  463:         else:
  464:             folders=folderList
  465:         #return producer
  466:         producerFolderName=self.getProducer(producer).producerFolderName
  467:         
  468:         for folder in folders:
  469:             os.mkdir(self.startPath+"/"+producerFolderName+"/"+folder)
  470:             os.chmod(self.startPath+"/"+producerFolderName+"/"+folder,0775)
  471:         self.REQUEST.SESSION['folderList']=folders
  472:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','createFolders.zpt')).__of__(self)
  473:         return pt()
  474: 
  475:     def storeerror(self,ret,path,context,i):
  476:         """store an error"""
  477:         session=context.REQUEST.SESSION
  478:         session['error%i'%i]=ret
  479:         session['path%i'%i]=path
  480:      
  481:         return 'error?number=%i'%i
  482: 
  483:     def geterror(self,str,context):
  484:         session=context.REQUEST.SESSION
  485:         return session[str]
  486: 
  487:     def readfile(self,path):
  488:         
  489:         ret=""
  490:         f=open(path,'r')
  491:         for g in f.readlines():
  492:             ret=ret+g
  493:         return ret
  494:      
  495:     def writefile(self,path,txt,REQUEST):
  496:         """writefile"""
  497:         f=open(path,'w')
  498:         f.write(txt)
  499:         f.close()
  500:         return self.archive2()
  501: 
  502:     def error(self):
  503:         """view errors"""
  504:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','processViewerError.zpt')).__of__(self)
  505:         return pt()
  506: 
  507:     
  508:     def archiveSelected(self):
  509:         """Archiviere ausgewaehlte files"""
  510:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','archiveSelected.zpt')).__of__(self)
  511:         return pt()
  512: 
  513:     def enterAcquisitionMetadata(self):
  514:         """Erstelle Metadaten fuer Acquisition"""
  515: 
  516:     def enterPreliminaryBibMeta(self):
  517:         """Erstelle Metadaten fuer Bibliography"""
  518:         
  519:     def showFilesForArchiving(self):
  520:         """Anzeige der noch zu archivieren Files"""
  521: 
  522:         
  523:     def changeOSAS_archiverForm(self):
  524:         """change"""
  525:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeOSAS_archiver.zpt')).__of__(self)
  526:         return pt()
  527: 
  528:     def changeOSAS_archiver(self,startPath,title="",RESPONSE=None):
  529:         """change"""
  530:         self.startPath=startPath
  531:         self.title=title
  532: 
  533:         if RESPONSE is not None:
  534:             RESPONSE.redirect('manage_main')
  535:     
  536: 
  537: def manage_AddOSAS_archiverForm(self):
  538:     """interface for adding the OSAS_root"""
  539:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_archiver.zpt')).__of__(self)
  540:     return pt()
  541: 
  542: 
  543: def manage_AddOSAS_archiver(self,id,startPath,title="",RESPONSE=None):
  544:     """add the OSAS_root"""
  545:     if title=="":
  546:         title=id
  547:         
  548:     newObj=OSAS_archiver(id, title,startPath)
  549:     self._setObject(id,newObj)
  550:     if RESPONSE is not None:
  551:         RESPONSE.redirect('manage_main')
  552: 
  553: 
  554: class OSAS_producer(SimpleItem,Persistent,Implicit):
  555:     """Klasse fuer Produzenteninformationen
  556:     Metadaten nach  V1.1.1"""
  557: 
  558:     meta_type="OSAS_producer"
  559: 
  560:     def __init__(self,shortName,fullName,producerFolderName,address="",url="",contact=""):
  561: 
  562:         self.id=shortName
  563:         self.title=fullName
  564:         self.address=address
  565:         self.url=url
  566:         self.contact=contact
  567:         self.producerFolderName=producerFolderName
  568:         
  569:     manage_options = SimpleItem.manage_options+(
  570:         {'label':'Main Config','action':'changeOSAS_producerForm'},
  571:         )
  572: 
  573:     def changeOSAS_producerForm(self):
  574:         """change"""
  575:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeOSAS_producer.zpt')).__of__(self)
  576:         return pt()
  577: 
  578:     def changeOSAS_producer(self,title,address,producerFolderName,contact="",url="",RESPONSE=None):
  579:         """change"""
  580:         self.title=title
  581:         self.address=address
  582:         self.url=url
  583:         self.contact=contact
  584:         self.producerFolderName=producerFolderName
  585: 
  586:         if RESPONSE:
  587:             RESPONSE.redirect("manage_main")
  588:         
  589: def manage_AddOSAS_producerForm(self):
  590:     """interface for adding the OSAS_root"""
  591:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_producer.zpt')).__of__(self)
  592:     return pt()
  593: 
  594: 
  595: def manage_AddOSAS_producer(self,id,producerFolderName,title="",contact="",address="",url="",RESPONSE=None):
  596:     """add the OSAS_root"""
  597:     if title=="":
  598:         title=id
  599:         
  600:     newObj=OSAS_producer(id, title,producerFolderName,address,contact,url)
  601:     self._setObject(id,newObj)
  602:     if RESPONSE is not None:
  603:         RESPONSE.redirect('manage_main')
  604: 

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