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