File:  [Repository] / OSAS / OSA_system / OSAS_archiver.py
Revision 1.6: download - view: text, annotated - select for diffs - revision graph
Tue Jan 6 14:39:49 2004 UTC (20 years, 5 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
corrected errors

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

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