File:  [Repository] / OSAS / OSA_system / OSAS_archiver.py
Revision 1.11: download - view: text, annotated - select for diffs - revision graph
Wed Mar 3 13:02:54 2004 UTC (20 years, 4 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
moved templates to zpt

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

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