File:  [Repository] / OSAS / OSA_system / OSAS_archiver.py
Revision 1.9: download - view: text, annotated - select for diffs - revision graph
Thu Jan 8 17:00:39 2004 UTC (20 years, 6 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
bug in inbox fixes

    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:         temp=self.pathes[0:]
   38:         temp.append([path,today])
   39:         self.pathes=temp[0:]
   40:         if RESPONSE:
   41:             RESPONSE.redirect("index_html")
   42: 
   43:     def index_html(self):
   44:         """main"""
   45:         pt=PageTemplateFile('Products/OSA_system/OSAS_archiveInboxIndex.zpt').__of__(self)
   46:         return pt()
   47:     
   48: def manage_AddOSAS_archiveInboxForm(self):
   49:     """interface for adding the OSAS_root"""
   50:     pt=PageTemplateFile('Products/OSA_system/AddOSAS_archiveInbox.zpt').__of__(self)
   51:     return pt()
   52: 
   53: 
   54: def manage_AddOSAS_archiveInbox(self,id,title="",RESPONSE=None):
   55:     """add the OSAS_root"""
   56:     if title=="":
   57:         title=id
   58:         
   59:     newObj=OSAS_archiveInbox(id, title)
   60:     self._setObject(id,newObj)
   61:     if RESPONSE is not None:
   62:         RESPONSE.redirect('manage_main')
   63:     
   64: 
   65: 
   66: class OSAS_metadataOrganizer(SimpleItem,Persistent,Implicit):
   67:     """Eingabe von Metadaten"""
   68: 
   69:     meta_type="OSAS_metadataOrganizer"
   70:     mediaTypes=["image","video","text","audio","data"]
   71:     acquisitionTypes=["Image-Acquisition"]
   72:     mediaToAcquisition={"image":"Image-Acquisition"}
   73:     metaDataSets={'Image-Acquisition': [('device','opt'),('image-type','opt'),('production-comment','opt')]}
   74:     imgData={'image':[('dpi','req')]}
   75:     
   76:     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')],
   77:                   'Journal Article':[('author','opt'),('year','opt'),('title','opt'),('journal','opt'),('volume','opt'),('issue','opt'),('pages','opt'),('alternate journal','opt'),('call number','opt')],
   78:                   'Manuscript':[('author','opt'),('year','opt'),('title','opt'),('location','opt'),('signature','opt'),('pages','opt'),('editorial remarks','opt'),('description','opt'),('keywords','opt')]}
   79: 
   80: 
   81:     referenceTypes=['Book','Journal Article','Manuscript']
   82: 
   83:     def __init__(self,id,title):
   84:         """init"""
   85:         self.id=id
   86:         self.title=title
   87:         #self.acquisitionData=['provider_name','provider_address','provider_contact','provider_url','date','description']
   88: 
   89: 
   90:     def getName(self):
   91:         """gives name from request session path"""
   92:         path=self.REQUEST.SESSION['path']
   93:         splitted=path.split("/")
   94:         return splitted[len(splitted)-1]
   95:         
   96:     def addRessourceMeta(self,path=None,RESPONSE=None):
   97:         """Metadaten fuer Ressource"""
   98:         if not path:
   99:             path=self.REQUEST.SESSION['path']
  100: 
  101:         else:
  102:             self.REQUEST.SESSION['path']=path
  103: 
  104:         pt=PageTemplateFile('Products/OSA_system/inputRessourceData.zpt').__of__(self)
  105:         return pt()
  106: 
  107:         
  108:     def writeRessourceMetadata(self,name,date,description,creator,RESPONSE=None):
  109:         """schreibe Resourcedata in index.meta"""
  110: 
  111:         path=self.REQUEST.SESSION['path']
  112: 
  113:         subnodes={}
  114:         subnodes['name']=name
  115:         subnodes['archive-creation-date']=date
  116:         subnodes['creator']=creator       
  117:         subnodes['description']=description
  118:         
  119:         changeNodesInIndexMeta(path,"",subnodes)
  120:         self.inbox.addPath(self.REQUEST.SESSION['path'])
  121:         RESPONSE.redirect(self.REQUEST['URL2'])
  122:         
  123:         
  124:     def addAcquisition(self,path):
  125:         """Hinzufügen von Acquisition Daten"""
  126:         self.REQUEST.SESSION['path']=path
  127:         pt=PageTemplateFile('Products/OSA_system/inputAcquisitionData.zpt').__of__(self)
  128:         return pt()
  129: 
  130: 
  131:     def writeAcquisitionMetadata(self,date,path,media_type,producer="mpiwg",description=""):
  132:         """Schreibe Acquisiondata in index.meta"""
  133:         
  134:         
  135:         #schreibe in index.meta
  136:         subnodes={}
  137:         subnodes['media-type']=media_type
  138:         changeNodesInIndexMeta(path,"",subnodes)
  139:         
  140:         subnodes={}
  141:         subnodes['date']=date
  142:         subnodes['description']=description
  143:         
  144:         changeNodesInIndexMeta(path,"acquisition",subnodes)
  145:         #print "HI"
  146: 
  147:         subnodes={}
  148:         subnodes['provider-id']=producer
  149:         subnodes['url']=getattr(self.producerFolder,producer).url
  150:         subnodes['contact']=getattr(self.producerFolder,producer).contact
  151:         subnodes['address']=getattr(self.producerFolder,producer).address
  152:         
  153:         changeNodesInIndexMeta(path,"provider",subnodes,parent="acquisition")
  154: 
  155:         
  156:         self.metaDataSet=self.metaDataSets[self.mediaToAcquisition[media_type]]
  157:         self.media_type=self.mediaToAcquisition[media_type]
  158:         
  159:         pt=PageTemplateFile('Products/OSA_system/inputDocumentMetadata.zpt').__of__(self)
  160:         return pt()
  161: 
  162:         
  163:     def writeDocumentMetadata(self,referenceType):
  164: 
  165:         """write document metadata"""
  166:         form=self.REQUEST.form
  167: #schreibe in index.meta
  168:         self.bibDataSet=self.bibDataSets[form['referenceType']]
  169:         self.bibdata_type=form['referenceType']
  170: 
  171:         subnodes={}
  172:         subnodes['device']=form['device']
  173:         subnodes['image-type']=form['image-type']
  174:         subnodes['production-comment']=form['production-comment']
  175:         changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"image-acquisition",subnodes)
  176: 
  177:         subnodes={}
  178:         subnodes['dpi']=form['dpi']
  179: 
  180:         
  181:         changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"img",subnodes)
  182: 
  183: 
  184:         pt=PageTemplateFile('Products/OSA_system/inputBiblioMetadata.zpt').__of__(self)
  185:         return pt()
  186: 
  187:     def writeBiblioMetadata(self,bibdata_type,RESPONSE=None):
  188:         """Write all"""
  189:         #to do write metadata
  190: 
  191:         subnodes={}
  192:         form=self.REQUEST.form
  193:         #for key in form.keys():
  194:         #    subnodes[key]=form['device']
  195:         subnodes=form
  196:         del subnodes['bibdata_type'] #in form but not metadata
  197:         changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"bib",subnodes,nodeAttributes={'type':bibdata_type},parent="meta")
  198:         #return self.REQUEST
  199:         return self.addRessourceMeta()
  200:         
  201: 
  202: 
  203:     
  204:         
  205:     
  206: 
  207: def manage_AddOSAS_metadataOrganizerForm(self):
  208:     """interface for adding the OSAS_root"""
  209:     pt=PageTemplateFile('Products/OSA_system/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/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/processViewerView.zpt').__of__(self)
  287:         return pt()
  288: 
  289:     def error(self):
  290:         """view errors"""
  291:         pt=PageTemplateFile('Products/OSA_system/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/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:     
  341:     
  342:     def archiver(self,path):
  343:         """archive the documents in path"""
  344:         tmp=archive.archive(path,self.REQUEST.SESSION)
  345:         pt=PageTemplateFile('Products/OSA_system/archiveStatus.zpt').__of__(self)
  346:         return pt()
  347: 
  348:     def archive2(self):
  349:         pt=PageTemplateFile('Products/OSA_system/archive2.zpt').__of__(self)
  350:         return pt()
  351: 
  352: 
  353:     def metachecker(self,path):
  354:         """check the metadata the documents in path"""
  355:         self.REQUEST.SESSION['path']=self.REQUEST['path']
  356:         return archive.metacheck(path)
  357: 
  358:     ## methods  from OSAS_show
  359:     def changeName(self,name):
  360:         return changeName(name)
  361: 
  362:     def hasMetafile(self,path):
  363:         return hasMetafile(path)
  364: 
  365:     def getMetafile(self,path):
  366:         return getMetafile(path)
  367: 
  368:     def toggle_view(self,path,file):
  369:         """Oeffnen bzw. schließen der Subfolders"""
  370:         self.tree(path).toggle(path,file)
  371:         return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"?path="+path)
  372: 
  373: 
  374: 
  375:     def isdigilib2(self,path):
  376:         """check if digilib"""
  377:         return isdigilib2(path)
  378: 
  379:     def path_to_link_view(self,path):
  380:         """generates navigation bar for viewfiles"""
  381:         return path_to_link_view(self.REQUEST['URL'],path)
  382:     
  383: 
  384:     def tree(self,start):
  385: 	"""get the filetree"""
  386: 	k=browse(start)
  387: 	return k
  388: 
  389:     def getfilesystem2(self,start,reload=0):
  390: 	"""load filesystem"""
  391: 
  392: 	k=filesystem2(start,1)
  393: 	return k
  394: 
  395:     def getfilesystem(self,start,reload=0):
  396: 	"""load filesystem"""
  397: 
  398: 	k=filesystem(start,1)
  399: 	return k
  400: 
  401: 
  402:     ##init
  403:     def __init__(self, id, title,startPath):
  404:         """init"""
  405:         self.id=id
  406:         self.title=title
  407:         self.startPath=startPath
  408: 
  409:     def archiver_html(self):
  410:         """archiver"""
  411:         pt=PageTemplateFile('Products/OSA_system/OSAS_Archiver.zpt').__of__(self)
  412:         return pt()
  413: 
  414:     def index_html(self):
  415:         """main page"""
  416:         pt=PageTemplateFile('Products/OSA_system/archiverIndex.zpt').__of__(self)
  417:         return pt()
  418: 
  419:     def getDate(self):
  420:         """date"""
  421:         return time.strftime("%Y-%m-%d",time.localtime())
  422:     
  423:     def newFolders_html(self):
  424:         """main page"""
  425:         pt=PageTemplateFile('Products/OSA_system/newFolders.zpt').__of__(self)
  426:         return pt()
  427: 
  428:     def getProducers(self):
  429:         """Ausgabe der registrierten Benutzer"""
  430:         ret=[]
  431:         #x=7
  432:         id=self.producerFolder.getId()
  433:         for list in self.producerFolder.__dict__:
  434:             obj=getattr(self.producerFolder,list)
  435:             if (hasattr(obj,"meta_type")):
  436:                 if (obj.meta_type=="OSAS_producer"):
  437:                     ret.append(obj.getId())
  438:         return ret
  439: 
  440:     def getProducer(self,id):
  441:         """Gebe ProducerObjekt zurück"""
  442:         obj=getattr(self.producerFolder,id)
  443:         return obj
  444:         
  445:         
  446: 
  447:     def createFoldersForm(self,producer,number):
  448:         """Erzeuge Folder im producer Verzeichnis mit ids"""
  449:         self.REQUEST.SESSION['producer']=producer
  450:         self.REQUEST.SESSION['ids']=self.idGenerator.giveIdsOut(number)
  451:         pt=PageTemplateFile('Products/OSA_system/createFoldersForm.zpt').__of__(self)
  452:         return pt()
  453:     
  454:     def createFolders(self,folderList,producer):
  455:         """Erzeug die entsprechenden Folder"""
  456:         #hack
  457:         #producer="library"
  458:         if type(folderList)==StringType:
  459:             folders=[folderList]
  460:         else:
  461:             folders=folderList
  462:         #return producer
  463:         producerFolderName=self.getProducer(producer).producerFolderName
  464:         
  465:         for folder in folders:
  466:             os.mkdir(self.startPath+"/"+producerFolderName+"/"+folder)
  467:             os.chmod(self.startPath+"/"+producerFolderName+"/"+folder,0775)
  468:         self.REQUEST.SESSION['folderList']=folders
  469:         pt=PageTemplateFile('Products/OSA_system/createFolders.zpt').__of__(self)
  470:         return pt()
  471: 
  472:     def storeerror(self,ret,path,context,i):
  473:         """store an error"""
  474:         session=context.REQUEST.SESSION
  475:         session['error%i'%i]=ret
  476:         session['path%i'%i]=path
  477:      
  478:         return 'error?number=%i'%i
  479: 
  480:     def geterror(self,str,context):
  481:         session=context.REQUEST.SESSION
  482:         return session[str]
  483: 
  484:     def readfile(self,path):
  485:         
  486:         ret=""
  487:         f=open(path,'r')
  488:         for g in f.readlines():
  489:             ret=ret+g
  490:         return ret
  491:      
  492:     def writefile(self,path,txt,REQUEST):
  493:         """writefile"""
  494:         f=open(path,'w')
  495:         f.write(txt)
  496:         f.close()
  497:         return self.archive2()
  498: 
  499:     def error(self):
  500:         """view errors"""
  501:         pt=PageTemplateFile('Products/OSA_system/processViewerError.zpt').__of__(self)
  502:         return pt()
  503: 
  504:     
  505:     def archiveSelected(self):
  506:         """Archiviere ausgewaehlte files"""
  507:         pt=PageTemplateFile('Products/OSA_system/archiveSelected.zpt').__of__(self)
  508:         return pt()
  509: 
  510:     def enterAcquisitionMetadata(self):
  511:         """Erstelle Metadaten fuer Acquisition"""
  512: 
  513:     def enterPreliminaryBibMeta(self):
  514:         """Erstelle Metadaten fuer Bibliography"""
  515:         
  516:     def showFilesForArchiving(self):
  517:         """Anzeige der noch zu archivieren Files"""
  518: 
  519:         
  520:     def changeOSAS_archiverForm(self):
  521:         """change"""
  522:         pt=PageTemplateFile('Products/OSA_system/ChangeOSAS_archiver.zpt').__of__(self)
  523:         return pt()
  524: 
  525:     def changeOSAS_archiver(self,startPath,title="",RESPONSE=None):
  526:         """change"""
  527:         self.startPath=startPath
  528:         self.title=title
  529: 
  530:         if RESPONSE is not None:
  531:             RESPONSE.redirect('manage_main')
  532:     
  533: 
  534: def manage_AddOSAS_archiverForm(self):
  535:     """interface for adding the OSAS_root"""
  536:     pt=PageTemplateFile('Products/OSA_system/AddOSAS_archiver.zpt').__of__(self)
  537:     return pt()
  538: 
  539: 
  540: def manage_AddOSAS_archiver(self,id,startPath,title="",RESPONSE=None):
  541:     """add the OSAS_root"""
  542:     if title=="":
  543:         title=id
  544:         
  545:     newObj=OSAS_archiver(id, title,startPath)
  546:     self._setObject(id,newObj)
  547:     if RESPONSE is not None:
  548:         RESPONSE.redirect('manage_main')
  549: 
  550: 
  551: class OSAS_producer(SimpleItem,Persistent,Implicit):
  552:     """Klasse fuer Produzenteninformationen
  553:     Metadaten nach  V1.1.1"""
  554: 
  555:     meta_type="OSAS_producer"
  556: 
  557:     def __init__(self,shortName,fullName,producerFolderName,address="",url="",contact=""):
  558: 
  559:         self.id=shortName
  560:         self.title=fullName
  561:         self.address=address
  562:         self.url=url
  563:         self.contact=contact
  564:         self.producerFolderName=producerFolderName
  565:         
  566:     manage_options = SimpleItem.manage_options+(
  567:         {'label':'Main Config','action':'changeOSAS_producerForm'},
  568:         )
  569: 
  570:     def changeOSAS_producerForm(self):
  571:         """change"""
  572:         pt=PageTemplateFile('Products/OSA_system/ChangeOSAS_producer.zpt').__of__(self)
  573:         return pt()
  574: 
  575:     def changeOSAS_producer(self,title,address,producerFolderName,contact="",url="",RESPONSE=None):
  576:         """change"""
  577:         self.title=title
  578:         self.address=address
  579:         self.url=url
  580:         self.contact=contact
  581:         self.producerFolderName=producerFolderName
  582: 
  583:         if RESPONSE:
  584:             RESPONSE.redirect("manage_main")
  585:         
  586: def manage_AddOSAS_producerForm(self):
  587:     """interface for adding the OSAS_root"""
  588:     pt=PageTemplateFile('Products/OSA_system/AddOSAS_producer.zpt').__of__(self)
  589:     return pt()
  590: 
  591: 
  592: def manage_AddOSAS_producer(self,id,producerFolderName,title="",contact="",address="",url="",RESPONSE=None):
  593:     """add the OSAS_root"""
  594:     if title=="":
  595:         title=id
  596:         
  597:     newObj=OSAS_producer(id, title,producerFolderName,address,contact,url)
  598:     self._setObject(id,newObj)
  599:     if RESPONSE is not None:
  600:         RESPONSE.redirect('manage_main')
  601: 

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