File:  [Repository] / OSAS / OSA_system / OSAS_archiver.py
Revision 1.8: download - view: text, annotated - select for diffs - revision graph
Wed Jan 7 15:29:01 2004 UTC (20 years, 6 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
bug fixed in archive

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

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