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