Annotation of OSAS/OSA_system/OSAS_add.py~, revision 1.1
1.1 ! dwinter 1:
! 2:
! 3:
! 4: #BAUSTELLE
! 5:
! 6:
! 7: """Methoden zum hinzufügen von Dokumenten ins Archiv"""
! 8: import archive
! 9: import os
! 10: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
! 11: from Products.PageTemplates.PageTemplate import PageTemplate
! 12: import string
! 13: import urllib
! 14: import xml.dom.minidom
! 15:
! 16: #referencetypes=['Book','Bic','Journal Article','Manuscript','jiji']
! 17:
! 18: import re
! 19: def add(self, no_upload=0):
! 20: """ Add metadata or metadata and documents to the repository
! 21: no_upload=0 kein upload sonst upload von documententen"""
! 22:
! 23: self.referencetypes=['Book','Journal Article','Manuscript']
! 24: """Aufruf der ersten Seite für Neueintraege"""
! 25: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/new').__of__(self)
! 26: self.REQUEST.SESSION['path']=self.REQUEST['path']
! 27: if self.REQUEST.has_key('no_upload'):
! 28: self.REQUEST.SESSION['no_upload']=self.REQUEST['no_upload']
! 29: else:
! 30: if self.REQUEST.SESSION.has_key('no_upload'):
! 31: del self.REQUEST.SESSION['no_upload']
! 32:
! 33: return newtemplate()
! 34: return self.referencetypes
! 35:
! 36:
! 37:
! 38: def getISO():
! 39: f=file('/usr/local/mpiwg/Zope/Extensions/iso639-1.inc','r').readlines()
! 40: ret={}
! 41: for lineraw in f:
! 42: line=lineraw.encode('ascii','replace')
! 43: value=string.split(line,'\t')[0].encode('ascii','replace')
! 44: key=string.split(line,'\t')[1].encode('ascii','replace')
! 45:
! 46: ret[key]=value
! 47: return ret
! 48:
! 49: def add2(self):
! 50: self.reftype=self.REQUEST['Reference Type']
! 51: self.REQUEST.SESSION['reftype']=self.reftype
! 52: self.bibdata={'Book':['author','year','title','series editor','series title','series volume','number of pages','city','publisher','edition','number of volumes','translator','ISBN ISSN'],
! 53: 'Journal Article':['author','year','title','journal','volume','issue','pages','alternate journal','call number'],
! 54: 'Manuscript':['author','year','title','location','signature','pages','editorial remarks','description','keywords']}
! 55:
! 56: self.fields=self.bibdata[self.reftype]
! 57: self.isolist=getISO()
! 58: #list=self.isolist.keys()[0:]
! 59: #print list
! 60: #print list.sort()
! 61:
! 62: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/bibdata').__of__(self)
! 63: return newtemplate()
! 64: #return self.fields
! 65:
! 66:
! 67: def parse_query_string(str):
! 68: queries={}
! 69: key=""
! 70: value=""
! 71: tmp=""
! 72: toggle="key"
! 73: str=urllib.unquote(str)
! 74: for i in str:
! 75: if i=="=":
! 76: key=tmp
! 77: toggle="value"
! 78: tmp=""
! 79: elif i=="&":
! 80: queries[key]=tmp
! 81: tmp=""
! 82: toggle="key"
! 83: else:
! 84: if toggle=="key":
! 85: if i=="+" : i="-"
! 86: else:
! 87: if i=="+" : i=" "
! 88: tmp=tmp+i
! 89: queries[key]=tmp
! 90: return queries
! 91:
! 92: def add3(self):
! 93: """Foldername"""
! 94: metadata=parse_query_string(self.REQUEST['QUERY_STRING'])
! 95: self.REQUEST.SESSION['metadata']=metadata
! 96: vorschlag_naming=metadata['author'][:5]+"_"+metadata['title'][:5]+"_"+metadata['year']
! 97: self.vorschlag_naming=vorschlag_naming.decode('ascii','ignore')
! 98: if self.REQUEST.SESSION.has_key('no_upload'):
! 99: self.REQUEST.SESSION['folder_name']=self.REQUEST.SESSION['path']
! 100: return add5(self)
! 101: else:
! 102: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/naming').__of__(self)
! 103: return newtemplate()
! 104:
! 105:
! 106: def add4(self):
! 107: self.path=re.search(r"/mpiwg(.*)",self.REQUEST.SESSION['path']).group(1)
! 108:
! 109: self.folder_name=self.REQUEST['folder_name']
! 110: # netx has to be changed -> error if back button is used!!
! 111: self.REQUEST.SESSION['path']=self.REQUEST.SESSION['path']+"/"+self.REQUEST['folder_name']
! 112:
! 113:
! 114: self.REQUEST.SESSION['folder_name']=self.folder_name
! 115: self.image_folder_name="pageimg"
! 116: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/upload').__of__(self)
! 117: return newtemplate()
! 118:
! 119: def add5(self):
! 120: """ADD INDEX.META"""
! 121: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/metadata').__of__(self)
! 122: return newtemplate()
! 123:
! 124: def add6(self):
! 125: metadata=parse_query_string(self.REQUEST['QUERY_STRING'])
! 126: metadata['archive-path']=os.path.split(self.REQUEST.SESSION['path'])[0]
! 127: #metadata['folder_name']=self.REQUEST.SESSION['folder_name']
! 128: metadata['folder_name']=os.path.split(self.REQUEST.SESSION['path'])[1]
! 129: metadata['content-type']="scanned document"
! 130: self.reftype=self.REQUEST.SESSION['reftype']
! 131: self.REQUEST.SESSION['add_metadata']=metadata
! 132: self.add_metadata=metadata
! 133: self.metadata=self.REQUEST.SESSION['metadata']
! 134: self.metadataprint=""
! 135: for tag in self.metadata.keys():
! 136: self.metadataprint=self.metadataprint+"<"+tag+">"+self.metadata[tag]+"</"+tag+">\n"
! 137:
! 138: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/index_meta').__of__(self)
! 139: newtemplate.content_type="text/plain"
! 140: renderxml = newtemplate()
! 141: if self.REQUEST.SESSION.has_key('no_upload'):
! 142: metapath=self.REQUEST.SESSION['path']+"/index.meta"
! 143: else:
! 144: metapath=self.add_metadata['archive-path']+"/"+self.add_metadata['folder_name']+"/index.meta"
! 145:
! 146: f=open(metapath,'w')
! 147: f.writelines(renderxml)
! 148: f.close()
! 149: os.chmod(metapath,0644)
! 150: if self.REQUEST.SESSION.has_key('no_upload'):
! 151:
! 152: #newtemplate2=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/done',"text/html").__of__(self)
! 153: return self.REQUEST.response.redirect("storage/storefiles?path="+self.REQUEST.SESSION['path'])
! 154: else:
! 155: self.viewpath=re.search(r"/mpiwg/online/(.*)",self.add_metadata['archive-path']).group(1)
! 156: newtemplate2=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/saved',"text/html").__of__(self)
! 157:
! 158:
! 159: newtemplate2.content_type="text/html"
! 160: self.REQUEST.response.setHeader('Content-Type','text/html')
! 161:
! 162:
! 163: return newtemplate2()
! 164:
! 165:
! 166: from time import localtime,strftime
! 167:
! 168: def date(self):
! 169: return strftime("%d.%m.%Y",localtime())
! 170:
! 171:
! 172: def addPresentation(self,path):
! 173: """add presentation to the path"""
! 174:
! 175: dom=xml.dom.minidom.parse(path+"/index.meta")
! 176:
! 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:
! 201: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/addPresentation').__of__(self)
! 202: return newtemplate()
! 203:
! 204: def addPresentation2(self):
! 205: """add presentation """
! 206: self.folder_name=self.REQUEST['folder_name']
! 207: #print self.REQUEST['folder_name']
! 208: self.content_description=self.REQUEST['content_description']
! 209:
! 210: self.path=self.REQUEST.SESSION['path']
! 211:
! 212: if not self.REQUEST.has_key('fileupload'):
! 213: self.xmlinfo=self.REQUEST['xmltext']
! 214: file_name="info.xml"
! 215:
! 216: else:
! 217: file_name=self.REQUEST['fileupload'].filename
! 218: self.xmlinfo=self.REQUEST.form['fileupload'].read()
! 219: # hack dW
! 220: file_name="info.xml"
! 221: self.xmlinfo=self.REQUEST['xmltext']
! 222: try:
! 223: os.mkdir(self.path+"/"+self.folder_name)
! 224: except:
! 225: """nothing"""
! 226: print "NAME:",file_name
! 227: f=open(self.path+"/"+self.folder_name+"/"+file_name,"w")
! 228: f.write(self.xmlinfo)
! 229: f.close()
! 230: os.chmod(self.path+"/"+self.folder_name,0755)
! 231: os.chmod(self.path+"/"+self.folder_name+"/"+file_name,0644)
! 232: addDirsToIndexMeta(self.path,self.folder_name,self.content_description,'presentation')
! 233:
! 234: return self.REQUEST.RESPONSE.redirect('storefiles?path='+self.path)
! 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
! 240: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/addText').__of__(self)
! 241: return newtemplate()
! 242:
! 243: def addText2(self):
! 244: self.folder_name=self.REQUEST['folder_name']
! 245: #print self.REQUEST['folder_name']
! 246: self.content_description=self.REQUEST['content_description']
! 247: self.path=self.REQUEST.SESSION['path']
! 248: self.file_name=self.REQUEST['fileupload'].filename
! 249: self.file=self.REQUEST.form['fileupload'].read()
! 250: os.mkdir(self.path+"/"+self.folder_name)
! 251: f=open(self.path+"/"+self.folder_name+"/"+self.file_name,"w")
! 252: f.write(self.file)
! 253: f.close()
! 254: os.chmod(self.path+"/"+self.folder_name,0755)
! 255: os.chmod(self.path+"/"+self.folder_name+"/"+self.file_name,0644)
! 256: addDirsToIndexMeta(self.path,self.folder_name,self.content_description,'fulltext')
! 257:
! 258: return self.REQUEST.RESPONSE.redirect('storefiles?path='+self.path)
! 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('/usr/local/mpiwg/Zope/Extensions/addImages').__of__(self)
! 365: return newtemplate()
! 366:
! 367: def addImages2(self):
! 368: self.image_folder_name=self.REQUEST['folder_name']
! 369: #print self.REQUEST['folder_name']
! 370: self.content_description=self.REQUEST['content_description']
! 371: self.path=self.REQUEST.SESSION['path']
! 372:
! 373:
! 374: self.content_type='images'
! 375: addDirsToIndexMeta(self.path,self.image_folder_name,self.content_description,self.content_type)
! 376: self.path=re.search(r"/mpiwg(.*)",self.REQUEST.SESSION['path']).group(1)
! 377: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/upload2').__of__(self)
! 378: return newtemplate()
! 379:
! 380:
! 381: def addDirsToIndexMeta(path,folder_name,content_description,content_type):
! 382: #f=file(path+"/index.meta",r)
! 383: dom=xml.dom.minidom.parse(path+"/index.meta")
! 384: node=dom.getElementsByTagName('resource')[0] #getNode
! 385:
! 386: subnode=dom.createElement('dir')
! 387:
! 388: namenode=dom.createElement('name')
! 389: namenodetext=dom.createTextNode(folder_name)
! 390: namenode.appendChild(namenodetext)
! 391: subnode.appendChild(namenode)
! 392:
! 393: descriptionnode=dom.createElement('description')
! 394: descriptionnodetext=dom.createTextNode(content_description)
! 395: descriptionnode.appendChild(descriptionnodetext)
! 396: subnode.appendChild(descriptionnode)
! 397:
! 398: contentnode=dom.createElement('content-type')
! 399: contentnodetext=dom.createTextNode(content_type)
! 400: contentnode.appendChild(contentnodetext)
! 401: subnode.appendChild(contentnode)
! 402:
! 403: node.appendChild(subnode)
! 404:
! 405: writefile=file(path+"/index.meta","w")
! 406: writefile.write(dom.toxml().encode('utf-8'))
! 407: writefile.close()
! 408:
! 409: def combineTextImage(self,path):
! 410: """gibt input formular zur erstellung des texttools meta tag aus"""
! 411: files = os.listdir(path)
! 412:
! 413: texts=[]
! 414: imagefolders=[]
! 415: presentationfolders=[]
! 416:
! 417: for filename in files:
! 418:
! 419: if archive.isdigilib2(path+"/"+filename):
! 420: imagefolders.append(filename)
! 421:
! 422: if archive.isFullText(path,filename):
! 423: texts.append(filename)
! 424: if archive.isPresentation(path,filename):
! 425: presentationfolders.append(filename)
! 426:
! 427: dom=xml.dom.minidom.parse(path+"/index.meta")
! 428: try:
! 429: filelanguage=archive.getText(dom.getElementsByTagName('lang')[0].childNodes)
! 430: except:
! 431: filelanguage=""
! 432: self.REQUEST.SESSION['isolist']=getISO()
! 433: self.REQUEST.SESSION['path']=path
! 434: self.REQUEST.SESSION['texts']=texts
! 435: self.REQUEST.SESSION['imagefolders']=imagefolders
! 436: self.REQUEST.SESSION['presentationfolders']=presentationfolders
! 437: self.REQUEST.SESSION['filelanguage']=filelanguage
! 438: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/ImageandText').__of__(self)
! 439: return newtemplate()
! 440:
! 441:
! 442:
! 443: def combineTextImage2(self,path):
! 444: """erstellt bzw. ändert texttool meta tag"""
! 445: dom=xml.dom.minidom.parse(path+"/index.meta")
! 446: node=dom.getElementsByTagName('meta')[0] #getNode
! 447:
! 448:
! 449: subnodelist=node.getElementsByTagName('texttool')
! 450: if not len(subnodelist)==0: #texttool tag existiert schon, dann löschen
! 451: subnode=node.removeChild(subnodelist[0])
! 452: subnode.unlink()
! 453:
! 454: subnode=dom.createElement('texttool') #neu erzeugen
! 455:
! 456:
! 457: presentfile=os.listdir(path+"/"+self.REQUEST['presentation'])[0]
! 458:
! 459:
! 460: displaynode=dom.createElement('display')
! 461: displaynodetext=dom.createTextNode('yes')
! 462: displaynode.appendChild(displaynodetext)
! 463: subnode.appendChild(displaynode)
! 464:
! 465: if self.REQUEST.has_key('image'):
! 466: namenode=dom.createElement('image')
! 467: namenodetext=dom.createTextNode(self.REQUEST['image'])
! 468: namenode.appendChild(namenodetext)
! 469: subnode.appendChild(namenode)
! 470:
! 471: if self.REQUEST.has_key('text'):
! 472: textfile=os.listdir(path+"/"+self.REQUEST['text'])[0]
! 473: textfoldernode=dom.createElement('text')
! 474: textfoldernodetext=dom.createTextNode(self.REQUEST['text']+"/"+textfile)
! 475: textfoldernode.appendChild(textfoldernodetext)
! 476: subnode.appendChild(textfoldernode)
! 477:
! 478: if self.REQUEST.has_key('pagebreak'):
! 479: pagebreaknode=dom.createElement('pagebreak')
! 480: pagebreaknodetext=dom.createTextNode(self.REQUEST['pagebreak'])
! 481: pagebreaknode.appendChild(pagebreaknodetext)
! 482: subnode.appendChild(pagebreaknode)
! 483:
! 484: if self.REQUEST.has_key('presentation'):
! 485: presentationnode=dom.createElement('presentation')
! 486: presentationnodetext=dom.createTextNode(self.REQUEST['presentation']+"/"+presentfile)
! 487: presentationnode.appendChild(presentationnodetext)
! 488: subnode.appendChild(presentationnode)
! 489:
! 490: node.appendChild(subnode)
! 491:
! 492: # node=dom.getElementsByTagName('lang')[0] #getNode
! 493:
! 494: writefile=file(path+"/index.meta","w")
! 495: writefile.write(dom.toxml().encode('utf-8'))
! 496: writefile.close()
! 497:
! 498:
! 499:
! 500: print urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
! 501: #return urllib.quote("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path)
! 502: 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']))
! 503: return self.REQUEST.RESPONSE.redirect('storefiles?path='+self.REQUEST['path'])
! 504:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>