Annotation of OSAS/OSA_system/OSAS_archiver.py, revision 1.10
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.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)
350: pt=PageTemplateFile('Products/OSA_system/archiveStatus.zpt').__of__(self)
351: return pt()
352:
1.8 dwinter 353: def archive2(self):
354: pt=PageTemplateFile('Products/OSA_system/archive2.zpt').__of__(self)
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"""
415: pt=PageTemplateFile('Products/OSA_system/OSAS_Archiver.zpt').__of__(self)
416: return pt()
417:
418: def index_html(self):
419: """main page"""
420: pt=PageTemplateFile('Products/OSA_system/archiverIndex.zpt').__of__(self)
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"""
429: pt=PageTemplateFile('Products/OSA_system/newFolders.zpt').__of__(self)
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)
455: pt=PageTemplateFile('Products/OSA_system/createFoldersForm.zpt').__of__(self)
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.1 dwinter 473: pt=PageTemplateFile('Products/OSA_system/createFolders.zpt').__of__(self)
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"""
505: pt=PageTemplateFile('Products/OSA_system/processViewerError.zpt').__of__(self)
506: return pt()
507:
508:
1.1 dwinter 509: def archiveSelected(self):
510: """Archiviere ausgewaehlte files"""
511: pt=PageTemplateFile('Products/OSA_system/archiveSelected.zpt').__of__(self)
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"""
526: pt=PageTemplateFile('Products/OSA_system/ChangeOSAS_archiver.zpt').__of__(self)
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"""
540: pt=PageTemplateFile('Products/OSA_system/AddOSAS_archiver.zpt').__of__(self)
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"""
576: pt=PageTemplateFile('Products/OSA_system/ChangeOSAS_producer.zpt').__of__(self)
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"""
592: pt=PageTemplateFile('Products/OSA_system/AddOSAS_producer.zpt').__of__(self)
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>