Annotation of OSAS/OSA_system/OSAS_add.py, revision 1.3
1.1 dwinter 1: #BAUSTELLE
2:
3:
4: """Methoden zum hinzufügen von Dokumenten ins Archiv"""
1.2 dwinter 5: import archive
1.1 dwinter 6: import os
7: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
8: from Products.PageTemplates.PageTemplate import PageTemplate
9: import string
10: import urllib
11: import xml.dom.minidom
12:
13: #referencetypes=['Book','Bic','Journal Article','Manuscript','jiji']
14:
15: import re
16: def add(self, no_upload=0):
17: """ Add metadata or metadata and documents to the repository
18: no_upload=0 kein upload sonst upload von documententen"""
19:
20: self.referencetypes=['Book','Journal Article','Manuscript']
21:
22: newtemplate=PageTemplateFile('products/OSA_system/OSAS_add_new').__of__(self)
23: self.REQUEST.SESSION['path']=self.REQUEST['path']
24: if no_upload==0:
25: self.REQUEST.SESSION['no_upload']='yes'
26: else:
27: if self.REQUEST.SESSION.has_key('no_upload'):
28: del self.REQUEST.SESSION['no_upload']
29:
30: return newtemplate()
31: return self.referencetypes
32:
33:
34:
35: def getISO():
36: f=file('/Users/dwinter/Documents/Projekte/OSAS/OSA_system/iso639-1.inc','r').readlines()
37: ret={}
38: for lineraw in f:
39: line=lineraw.encode('ascii','replace')
40: value=string.split(line,'\t')[0].encode('ascii','replace')
41: key=string.split(line,'\t')[1].encode('ascii','replace')
42:
43: ret[key]=value
44: return ret
45:
46: def add2(self):
47: self.reftype=self.REQUEST['Reference Type']
48: self.REQUEST.SESSION['reftype']=self.reftype
49: self.bibdata={'Book':['author','year','title','series editor','series title','series volume','number of pages','city','publisher','edition','number of volumes','translator','ISBN ISSN'],
50: 'Journal Article':['author','year','title','journal','volume','issue','pages','alternate journal','call number'],
51: 'Manuscript':['author','year','title','location','signature','pages','editorial remarks','description','keywords']}
52:
53: self.fields=self.bibdata[self.reftype]
54: self.isolist=getISO()
55: #listed=[ x for x in self.isolist.keys()]
56: #print listed
57: #sorted=listed.sort()
58: #print sorted
59:
60: newtemplate=PageTemplateFile('products/OSA_system/OSAS_add_bibdata').__of__(self)
61: return newtemplate()
62: #return self.fields
63:
64:
65: def parse_query_string(str):
66: queries={}
67: key=""
68: value=""
69: tmp=""
70: toggle="key"
71: str=urllib.unquote(str)
72: for i in str:
73: if i=="=":
74: key=tmp
75: toggle="value"
76: tmp=""
77: elif i=="&":
78: queries[key]=tmp
79: tmp=""
80: toggle="key"
81: else:
82: if toggle=="key":
83: if i=="+" : i="-"
84: else:
85: if i=="+" : i=" "
86: tmp=tmp+i
87: queries[key]=tmp
88: return queries
89:
90: def add3(self):
91: """Foldername"""
92: metadata=parse_query_string(self.REQUEST['QUERY_STRING'])
93: self.REQUEST.SESSION['metadata']=metadata
94: vorschlag_naming=metadata['author'][:5]+"_"+metadata['title'][:5]+"_"+metadata['year']
95: self.vorschlag_naming=vorschlag_naming.decode('ascii','ignore')
96: if self.REQUEST.SESSION.has_key('no_upload'):
97: self.REQUEST.SESSION['folder_name']=self.REQUEST.SESSION['path']
98: return add5(self)
99: else:
100: newtemplate=PageTemplateFile('products/OSA_system/OSAS_add_naming').__of__(self)
101: return newtemplate()
102:
103:
104: def add4(self):
105: self.path=re.search(r"/mpiwg(.*)",self.REQUEST.SESSION['path']).group(1)
106:
107: self.folder_name=self.REQUEST['folder_name']
108: # netx has to be changed -> error if back button is used!!
109: self.REQUEST.SESSION['path']=self.REQUEST.SESSION['path']+"/"+self.REQUEST['folder_name']
110:
111:
112: self.REQUEST.SESSION['folder_name']=self.folder_name
113: self.image_folder_name="pageimg"
114: newtemplate=PageTemplateFile('products/OSA_system/OSAS_upload').__of__(self)
115: return newtemplate()
116:
117: def add5(self):
118: """ADD INDEX.META"""
119: newtemplate=PageTemplateFile('products/OSA_system/OSAS_add_metadata').__of__(self)
120: return newtemplate()
121:
122: def add6(self):
123: metadata=parse_query_string(self.REQUEST['QUERY_STRING'])
124: metadata['archive-path']=os.path.split(self.REQUEST.SESSION['path'])[0]
125: #metadata['folder_name']=self.REQUEST.SESSION['folder_name']
126: metadata['folder_name']=os.path.split(self.REQUEST.SESSION['path'])[1]
127: metadata['content-type']="scanned document"
128: self.reftype=self.REQUEST.SESSION['reftype']
129: self.REQUEST.SESSION['add_metadata']=metadata
130: self.add_metadata=metadata
131: self.metadata=self.REQUEST.SESSION['metadata']
132: self.metadataprint=""
133: for tag in self.metadata.keys():
134: self.metadataprint=self.metadataprint+"<"+tag+">"+self.metadata[tag]+"</"+tag+">\n"
135:
136: newtemplate=PageTemplateFile('products/OSA_system/index_meta').__of__(self)
137: newtemplate.content_type="text/plain"
138: renderxml = newtemplate()
139: if self.REQUEST.SESSION.has_key('no_upload'):
140: metapath=self.REQUEST.SESSION['path']+"/index.meta"
141: else:
142: metapath=self.add_metadata['archive-path']+"/"+self.add_metadata['folder_name']+"/index.meta"
143:
144: f=open(metapath,'w')
145: f.writelines(renderxml)
146: f.close()
147: os.chmod(metapath,0644)
148: if self.REQUEST.SESSION.has_key('no_upload'):
149:
150: #newtemplate2=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/done',"text/html").__of__(self)
151: return self.REQUEST.response.redirect(self.REQUEST['URL2']+"?path="+self.REQUEST.SESSION['path'])
152: else:
153: #print self.add_metadata['archive-path']
154: self.viewpath=re.search(r"/mpiwg/online/(.*)",self.add_metadata['archive-path']).group(1)
155: newtemplate2=PageTemplateFile('products/OSA_system/OSAS_saved').__of__(self)
156:
157:
158: newtemplate2.content_type="text/html"
159: self.REQUEST.response.setHeader('Content-Type','text/html')
160:
161:
162: return newtemplate2()
163:
164:
165: from time import localtime,strftime
166:
167: def date(self):
168: return strftime("%d.%m.%Y",localtime())
169:
170:
171: def addPresentation(self,path):
172: """add presentation to the path"""
173:
174: dom=xml.dom.minidom.parse(path+"/index.meta")
1.3 ! dwinter 175:
! 176:
1.1 dwinter 177: try:
178: author=archive.getText(dom.getElementsByTagName('author')[0].childNodes)
179: except:
180: author=archive.getText(dom.getElementsByTagName('Author')[0].childNodes)
181: title=archive.getText(dom.getElementsByTagName('title')[0].childNodes)
182: try:
183: date=archive.getText(dom.getElementsByTagName('year')[0].childNodes)
184: except:
185: try:
186: date=archive.getText(dom.getElementsByTagName('Year')[0].childNodes)
187: except:
188: date=archive.getText(dom.getElementsByTagName('date')[0].childNodes)
189: i=1
190: while os.path.exists("%02d-presentation"%i):
191: i+=1
192: self.REQUEST.SESSION['presentationname']="%02d-presentation"%i
193: self.REQUEST.SESSION['path']=path
194: self.REQUEST.SESSION['xmlvorschlag']="""<info>
195: <author>%s</author>
196: <title>%s</title>
197: <date>%s</date>
198: <display>yes</display>
199: </info>"""%(author,title,date)
200:
1.2 dwinter 201: newtemplate=PageTemplateFile('products/OSA_system/addPresentation').__of__(self)
1.1 dwinter 202: return newtemplate()
203:
204: def addPresentation2(self):
205: """add presentation """
1.2 dwinter 206: folder_name=self.REQUEST['folder_name']
1.1 dwinter 207: #print self.REQUEST['folder_name']
1.2 dwinter 208: content_description=self.REQUEST['content_description']
1.1 dwinter 209:
1.2 dwinter 210: path=self.REQUEST.SESSION['path']
1.1 dwinter 211:
212: if not self.REQUEST.has_key('fileupload'):
1.2 dwinter 213: xmlinfo=self.REQUEST['xmltext']
1.1 dwinter 214: file_name="info.xml"
215:
216: else:
217: file_name=self.REQUEST['fileupload'].filename
1.2 dwinter 218: xmlinfo=self.REQUEST.form['fileupload'].read()
219: # hack Multipart auswertung funktioniert nicht ausser bei mozilla
1.1 dwinter 220: file_name="info.xml"
1.2 dwinter 221: xmlinfo=self.REQUEST['xmltext']
1.1 dwinter 222: try:
1.2 dwinter 223: os.mkdir(path+"/"+folder_name)
1.1 dwinter 224: except:
225: """nothing"""
226: print "NAME:",file_name
1.2 dwinter 227: f=open(path+"/"+folder_name+"/"+file_name,"w")
228: f.write(xmlinfo)
1.1 dwinter 229: f.close()
1.2 dwinter 230: os.chmod(path+"/"+folder_name,0755)
231: os.chmod(path+"/"+folder_name+"/"+file_name,0644)
232: addDirsToIndexMeta(path,folder_name,content_description,'presentation')
1.1 dwinter 233:
1.2 dwinter 234: return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+path)
1.1 dwinter 235:
236: def addText(self,path):
237: """add fulltext to the path"""
238: self.REQUEST.SESSION['existing_names']=['pageimg'] # to be done generate list of existing text files
239: self.REQUEST.SESSION['path']=path
1.2 dwinter 240: newtemplate=PageTemplateFile('products/OSA_system/addText').__of__(self)
1.1 dwinter 241: return newtemplate()
242:
243: def addText2(self):
1.2 dwinter 244: folder_name=self.REQUEST['folder_name']
1.1 dwinter 245: #print self.REQUEST['folder_name']
1.2 dwinter 246: content_description=self.REQUEST['content_description']
247: path=self.REQUEST.SESSION['path']
248: file_name=self.REQUEST['fileupload'].filename
249: filedata=self.REQUEST.form['fileupload'].read()
250: os.mkdir(path+"/"+folder_name)
251: f=open(path+"/"+folder_name+"/"+file_name,"w")
252: f.write(filedata)
1.1 dwinter 253: f.close()
1.2 dwinter 254: os.chmod(path+"/"+folder_name,0755)
255: os.chmod(path+"/"+folder_name+"/"+file_name,0644)
256: addDirsToIndexMeta(path,folder_name,content_description,'fulltext')
1.1 dwinter 257:
1.2 dwinter 258: return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+path)
1.1 dwinter 259:
260: def addTextExternal(self,path,texturl,version):
261: """hinzufügen eines externen textes"""
262: try: #neue text version einlesen
263: texttemp=urllib.urlopen(texturl).readlines()
264: text=""
265: for line in texttemp:
266: text=text+line
267: except: #fehler beim lesen des textes
268: return "ERROR: cannot read: %s"%texturl
269: if TextExternalError(text): #kein xml header
270: return "ERROR: cannot read: %s"%texturl, "received:",text
271: textpath=getNewTextPath(path) #erzeuge neuen Ornder für den Text
272: splitted=string.split(texturl,"/")
273: name=splitted[len(splitted)-1] #Name des XML-files
274: try:
275: writefile=file(path+"/"+textpath+"/"+name,"w")
276: except:
277: return"ERROR: cannot write: %s"%path+"/"+textpath+"/"+name
278: writefile.write(text)
279: writefile.close()
280: os.chmod(path+"/"+textpath+"/"+name,0644)
281:
282: #add new file to XML
283: dom=xml.dom.minidom.parse(path+"/index.meta")
284: node=dom.getElementsByTagName('resource')[0] #getNode
285:
286: subnode=dom.createElement('dir')
287:
288: namenode=dom.createElement('name')
289: namenodetext=dom.createTextNode(textpath)
290: namenode.appendChild(namenodetext)
291: subnode.appendChild(namenode)
292:
293: descriptionnode=dom.createElement('description')
294: descriptionnodetext=dom.createTextNode('archimedes text:'+version)
295: descriptionnode.appendChild(descriptionnodetext)
296: subnode.appendChild(descriptionnode)
297:
298: contentnode=dom.createElement('content-type')
299: contentnodetext=dom.createTextNode('fulltext')
300: contentnode.appendChild(contentnodetext)
301: subnode.appendChild(contentnode)
302:
303: node.appendChild(subnode)
304:
305: writefile=file(path+"/index.meta","w")
306: writefile.write(dom.toxml().encode('utf-8'))
307: writefile.close()
308:
309: #change texttool tag
310: dom=xml.dom.minidom.parse(path+"/index.meta")
311: node=dom.getElementsByTagName('meta')[0] #getNode
312:
313: try: #texttool existiert schon
314: subnode=node.getElementsByTagName('texttool')[0]
315: except: #wenn nicht Fehler ausgeben
316: return "ERROR:no presentation configured yet, user Web Front End to do so!"
317:
318:
319: try:
320: texttoolnodelist=subnode.getElementsByTagName('text')
321:
322: if not len(texttoolnodelist)==0: #texttool tag existiert schon, dann löschen
323: subsubnode=subnode.removeChild(texttoolnodelist[0])
324: subsubnode.unlink()
325: except:
326: """nothing"""
327: # text neu anlegen
328: textfoldernode=dom.createElement('text')
329: textfoldernodetext=dom.createTextNode(textpath+"/"+name)
330: textfoldernode.appendChild(textfoldernodetext)
331: subnode.appendChild(textfoldernode)
332:
333: #index.meta ausgeben
334: writefile=file(path+"/index.meta","w")
335: writefile.write(dom.toxml().encode('utf-8'))
336: writefile.close()
337:
338: #registrieren
339: print urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
340:
341: return "DONE:"+textpath+"/"+name
342:
343: def TextExternalError(text):
344: firsts=text[0:10]
345: print firsts
346: try:
347: match=re.search(r".*<?xml.*",firsts)
348: except:
349: return 1
350: return 0
351:
352: def getNewTextPath(path):
353: i=1
354: while os.path.exists(path+"/fulltext%i"%i):
355: i+=1
356: os.mkdir(path+"/fulltext%i"%i)
357: os.chmod(path+"/fulltext%i"%i,0755)
358: return "fulltext%i"%i
359:
360: def addImages(self,path):
361: """Imagesfolder to the path"""
362: self.REQUEST.SESSION['existing_names']=['pageimg'] # to be done generate list of existing pageimages files
363: self.REQUEST.SESSION['path']=path
364: newtemplate=PageTemplateFile('products/OSA_system/OSAS_addImages').__of__(self)
365: return newtemplate()
366:
367: def addImages2(self):
1.2 dwinter 368:
1.1 dwinter 369: self.image_folder_name=self.REQUEST['folder_name']
370: #print self.REQUEST['folder_name']
371: self.content_description=self.REQUEST['content_description']
372: #self.path=self.REQUEST.SESSION['path']
373:
374:
375: self.content_type='images'
376: addDirsToIndexMeta(self.REQUEST.SESSION['path'],self.image_folder_name,self.content_description,self.content_type)
377: self.REQUEST.SESSION['path']=re.search(r"/mpiwg(.*)",self.REQUEST.SESSION['path']).group(1)
378: newtemplate=PageTemplateFile('products/OSA_system/OSAS_upload2').__of__(self)
379: return newtemplate()
1.2 dwinter 380:
1.1 dwinter 381:
382:
383: def addDirsToIndexMeta(path,folder_name,content_description,content_type):
384: #f=file(path+"/index.meta",r)
385: dom=xml.dom.minidom.parse(path+"/index.meta")
386: node=dom.getElementsByTagName('resource')[0] #getNode
387:
388: subnode=dom.createElement('dir')
389:
390: namenode=dom.createElement('name')
391: namenodetext=dom.createTextNode(folder_name)
392: namenode.appendChild(namenodetext)
393: subnode.appendChild(namenode)
394:
395: descriptionnode=dom.createElement('description')
396: descriptionnodetext=dom.createTextNode(content_description)
397: descriptionnode.appendChild(descriptionnodetext)
398: subnode.appendChild(descriptionnode)
399:
400: contentnode=dom.createElement('content-type')
401: contentnodetext=dom.createTextNode(content_type)
402: contentnode.appendChild(contentnodetext)
403: subnode.appendChild(contentnode)
404:
405: node.appendChild(subnode)
406:
407: writefile=file(path+"/index.meta","w")
408: writefile.write(dom.toxml().encode('utf-8'))
409: writefile.close()
410:
411: def combineTextImage(self,path):
412: """gibt input formular zur erstellung des texttools meta tag aus"""
413: files = os.listdir(path)
414:
415: texts=[]
416: imagefolders=[]
417: presentationfolders=[]
418:
419: for filename in files:
420:
421: if archive.isdigilib2(path+"/"+filename):
422: imagefolders.append(filename)
423:
424: if archive.isFullText(path,filename):
425: texts.append(filename)
426: if archive.isPresentation(path,filename):
427: presentationfolders.append(filename)
428:
429: dom=xml.dom.minidom.parse(path+"/index.meta")
430: try:
431: filelanguage=archive.getText(dom.getElementsByTagName('lang')[0].childNodes)
432: except:
433: filelanguage=""
434: self.REQUEST.SESSION['isolist']=getISO()
435: self.REQUEST.SESSION['path']=path
436: self.REQUEST.SESSION['texts']=texts
437: self.REQUEST.SESSION['imagefolders']=imagefolders
438: self.REQUEST.SESSION['presentationfolders']=presentationfolders
439: self.REQUEST.SESSION['filelanguage']=filelanguage
1.2 dwinter 440: newtemplate=PageTemplateFile('products/OSA_system/ImageandText').__of__(self)
1.1 dwinter 441: return newtemplate()
442:
443:
444:
445: def combineTextImage2(self,path):
446: """erstellt bzw. ändert texttool meta tag"""
447: dom=xml.dom.minidom.parse(path+"/index.meta")
448: node=dom.getElementsByTagName('meta')[0] #getNode
449:
450:
451: subnodelist=node.getElementsByTagName('texttool')
452: if not len(subnodelist)==0: #texttool tag existiert schon, dann löschen
453: subnode=node.removeChild(subnodelist[0])
454: subnode.unlink()
455:
456: subnode=dom.createElement('texttool') #neu erzeugen
457:
458:
459: presentfile=os.listdir(path+"/"+self.REQUEST['presentation'])[0]
460:
461:
462: displaynode=dom.createElement('display')
463: displaynodetext=dom.createTextNode('yes')
464: displaynode.appendChild(displaynodetext)
465: subnode.appendChild(displaynode)
466:
467: if self.REQUEST.has_key('image'):
468: namenode=dom.createElement('image')
469: namenodetext=dom.createTextNode(self.REQUEST['image'])
470: namenode.appendChild(namenodetext)
471: subnode.appendChild(namenode)
472:
473: if self.REQUEST.has_key('text'):
474: textfile=os.listdir(path+"/"+self.REQUEST['text'])[0]
475: textfoldernode=dom.createElement('text')
476: textfoldernodetext=dom.createTextNode(self.REQUEST['text']+"/"+textfile)
477: textfoldernode.appendChild(textfoldernodetext)
478: subnode.appendChild(textfoldernode)
479:
480: if self.REQUEST.has_key('pagebreak'):
481: pagebreaknode=dom.createElement('pagebreak')
482: pagebreaknodetext=dom.createTextNode(self.REQUEST['pagebreak'])
483: pagebreaknode.appendChild(pagebreaknodetext)
484: subnode.appendChild(pagebreaknode)
485:
486: if self.REQUEST.has_key('presentation'):
487: presentationnode=dom.createElement('presentation')
488: presentationnodetext=dom.createTextNode(self.REQUEST['presentation']+"/"+presentfile)
489: presentationnode.appendChild(presentationnodetext)
490: subnode.appendChild(presentationnode)
491:
492: node.appendChild(subnode)
493:
494: # node=dom.getElementsByTagName('lang')[0] #getNode
495:
496: writefile=file(path+"/index.meta","w")
497: writefile.write(dom.toxml().encode('utf-8'))
498: writefile.close()
499:
500:
501:
1.2 dwinter 502: urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
1.1 dwinter 503: #return urllib.quote("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path)
504: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/thumb 90 &"% re.sub('mpiwg/online/','',self.REQUEST['path']+"/"+self.REQUEST['image']))
1.3 ! dwinter 505:
! 506: #return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+self.REQUEST['path'])
1.1 dwinter 507:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>