Annotation of OSAS/OSA_system/OSAS_archiver.py, revision 1.6
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:
1.6 ! dwinter 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:
1.1 dwinter 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:
1.6 ! dwinter 125:
1.3 dwinter 126: def writeAcquisitionMetadata(self,date,path,media_type,producer="mpiwg",description=""):
1.1 dwinter 127: """Schreibe Acquisiondata in index.meta"""
128:
1.3 dwinter 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
1.6 ! dwinter 191: del subnodes['bibdata_type'] #in form but not metadata
1.3 dwinter 192: changeNodesInIndexMeta(self.REQUEST.SESSION['path'],"bib",subnodes,nodeAttributes={'type':bibdata_type},parent="meta")
1.6 ! dwinter 193: #return self.REQUEST
! 194: return self.addRessourceMeta()
1.3 dwinter 195:
196:
197:
198:
199:
200:
201:
1.1 dwinter 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:
1.6 ! dwinter 239: def getFile(self,number):
1.1 dwinter 240: """get info from session"""
1.6 ! dwinter 241: check=self.getoverview('/var/tmp/archiver').messages()[number]
! 242: return check
1.1 dwinter 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:
1.4 dwinter 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:
1.6 ! dwinter 277: def view(self,number):
1.1 dwinter 278: """view page"""
1.6 ! dwinter 279: self.errnum=number
1.1 dwinter 280: pt=PageTemplateFile('Products/OSA_system/processViewerView.zpt').__of__(self)
281: return pt()
1.4 dwinter 282:
283: def error(self):
284: """view errors"""
285: pt=PageTemplateFile('Products/OSA_system/processViewerError.zpt').__of__(self)
286: return pt()
1.1 dwinter 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:
1.5 dwinter 311: manage_options = Folder.manage_options+(
312: {'label':'Main Config','action':'changeOSAS_archiverForm'},
313: )
314:
1.1 dwinter 315: # to be deleted later
316: #startPath="/mpiwg"
317: ## methoden aus dem alten archive.py
318:
1.3 dwinter 319:
320:
1.1 dwinter 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()
1.3 dwinter 395:
396: def getDate(self):
397: """date"""
398: return time.strftime("%Y-%m-%d",time.localtime())
1.1 dwinter 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=[]
1.3 dwinter 408: #x=7
409: id=self.producerFolder.getId()
1.1 dwinter 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"""
1.5 dwinter 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:
1.1 dwinter 442: os.mkdir(self.startPath+"/"+producer+"/"+folder)
1.5 dwinter 443: os.chmod(self.startPath+"/"+producer+"/"+folder,0775)
444: self.REQUEST.SESSION['folderList']=folders
1.1 dwinter 445: pt=PageTemplateFile('Products/OSA_system/createFolders.zpt').__of__(self)
446: return pt()
447:
1.4 dwinter 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:
1.1 dwinter 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:
1.5 dwinter 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
1.1 dwinter 505:
1.5 dwinter 506: if RESPONSE is not None:
507: RESPONSE.redirect('manage_main')
1.1 dwinter 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:
1.3 dwinter 527: class OSAS_producer(SimpleItem,Persistent,Implicit):
1.2 dwinter 528: """Klasse fuer Produzenteninformationen
529: Metadaten nach V1.1.1"""
1.1 dwinter 530:
531: meta_type="OSAS_producer"
532:
1.2 dwinter 533: def __init__(self,shortName,fullName,address="",url="",contact=""):
1.1 dwinter 534:
535: self.id=shortName
536: self.title=fullName
1.2 dwinter 537: self.address=address
538: self.url=url
539: self.contact=contact
540:
1.3 dwinter 541: manage_options = SimpleItem.manage_options+(
1.2 dwinter 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()
1.3 dwinter 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
1.1 dwinter 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:
1.2 dwinter 563: def manage_AddOSAS_producer(self,id,title="",contact="",address="",url="",RESPONSE=None):
1.1 dwinter 564: """add the OSAS_root"""
565: if title=="":
566: title=id
567:
1.2 dwinter 568: newObj=OSAS_producer(id, title,address,contact,url)
1.1 dwinter 569: self._setObject(id,newObj)
570: if RESPONSE is not None:
571: RESPONSE.redirect('manage_main')
572:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>