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