Annotation of OSAS/OSA_system/OSAS_archiver.py, revision 1.5

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

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