Annotation of OSAS/OSA_system/OSAS_archiver.py.~1.5.~, revision 1.1
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 *
! 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: 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:
! 90: def writeAcquisitionMetadata(self,date,path,media_type,producer="mpiwg",description=""):
! 91: """Schreibe Acquisiondata in index.meta"""
! 92:
! 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:
! 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:
! 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:
! 239: def view(self):
! 240: """view page"""
! 241: pt=PageTemplateFile('Products/OSA_system/processViewerView.zpt').__of__(self)
! 242: return pt()
! 243:
! 244: def error(self):
! 245: """view errors"""
! 246: pt=PageTemplateFile('Products/OSA_system/processViewerError.zpt').__of__(self)
! 247: return pt()
! 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:
! 272: manage_options = Folder.manage_options+(
! 273: {'label':'Main Config','action':'changeOSAS_archiverForm'},
! 274: )
! 275:
! 276: # to be deleted later
! 277: #startPath="/mpiwg"
! 278: ## methoden aus dem alten archive.py
! 279:
! 280:
! 281:
! 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()
! 356:
! 357: def getDate(self):
! 358: """date"""
! 359: return time.strftime("%Y-%m-%d",time.localtime())
! 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=[]
! 369: #x=7
! 370: id=self.producerFolder.getId()
! 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"""
! 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:
! 403: os.mkdir(self.startPath+"/"+producer+"/"+folder)
! 404: os.chmod(self.startPath+"/"+producer+"/"+folder,0775)
! 405: self.REQUEST.SESSION['folderList']=folders
! 406: pt=PageTemplateFile('Products/OSA_system/createFolders.zpt').__of__(self)
! 407: return pt()
! 408:
! 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:
! 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:
! 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
! 466:
! 467: if RESPONSE is not None:
! 468: RESPONSE.redirect('manage_main')
! 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:
! 488: class OSAS_producer(SimpleItem,Persistent,Implicit):
! 489: """Klasse fuer Produzenteninformationen
! 490: Metadaten nach V1.1.1"""
! 491:
! 492: meta_type="OSAS_producer"
! 493:
! 494: def __init__(self,shortName,fullName,address="",url="",contact=""):
! 495:
! 496: self.id=shortName
! 497: self.title=fullName
! 498: self.address=address
! 499: self.url=url
! 500: self.contact=contact
! 501:
! 502: manage_options = SimpleItem.manage_options+(
! 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()
! 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
! 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:
! 524: def manage_AddOSAS_producer(self,id,title="",contact="",address="",url="",RESPONSE=None):
! 525: """add the OSAS_root"""
! 526: if title=="":
! 527: title=id
! 528:
! 529: newObj=OSAS_producer(id, title,address,contact,url)
! 530: self._setObject(id,newObj)
! 531: if RESPONSE is not None:
! 532: RESPONSE.redirect('manage_main')
! 533:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>