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:
! 25: newtemplate=PageTemplateFile('products/OSA_system/OSAS_add_new').__of__(self)
! 26: self.REQUEST.SESSION['path']=self.REQUEST['path']
! 27: if no_upload==0:
! 28: self.REQUEST.SESSION['no_upload']='yes'
! 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('/Users/dwinter/Documents/Projekte/OSAS/OSA_system/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: #listed=[ x for x in self.isolist.keys()]
! 59: #print listed
! 60: #sorted=listed.sort()
! 61: #print sorted
! 62:
! 63: newtemplate=PageTemplateFile('products/OSA_system/OSAS_add_bibdata').__of__(self)
! 64: return newtemplate()
! 65: #return self.fields
! 66:
! 67:
! 68: def parse_query_string(str):
! 69: queries={}
! 70: key=""
! 71: value=""
! 72: tmp=""
! 73: toggle="key"
! 74: str=urllib.unquote(str)
! 75: for i in str:
! 76: if i=="=":
! 77: key=tmp
! 78: toggle="value"
! 79: tmp=""
! 80: elif i=="&":
! 81: queries[key]=tmp
! 82: tmp=""
! 83: toggle="key"
! 84: else:
! 85: if toggle=="key":
! 86: if i=="+" : i="-"
! 87: else:
! 88: if i=="+" : i=" "
! 89: tmp=tmp+i
! 90: queries[key]=tmp
! 91: return queries
! 92:
! 93: def add3(self):
! 94: """Foldername"""
! 95: metadata=parse_query_string(self.REQUEST['QUERY_STRING'])
! 96: self.REQUEST.SESSION['metadata']=metadata
! 97: vorschlag_naming=metadata['author'][:5]+"_"+metadata['title'][:5]+"_"+metadata['year']
! 98: self.vorschlag_naming=vorschlag_naming.decode('ascii','ignore')
! 99: if self.REQUEST.SESSION.has_key('no_upload'):
! 100: self.REQUEST.SESSION['folder_name']=self.REQUEST.SESSION['path']
! 101: return add5(self)
! 102: else:
! 103: newtemplate=PageTemplateFile('products/OSA_system/OSAS_add_naming').__of__(self)
! 104: return newtemplate()
! 105:
! 106:
! 107: def add4(self):
! 108: self.path=re.search(r"/mpiwg(.*)",self.REQUEST.SESSION['path']).group(1)
! 109:
! 110: self.folder_name=self.REQUEST['folder_name']
! 111: # netx has to be changed -> error if back button is used!!
! 112: self.REQUEST.SESSION['path']=self.REQUEST.SESSION['path']+"/"+self.REQUEST['folder_name']
! 113:
! 114:
! 115: self.REQUEST.SESSION['folder_name']=self.folder_name
! 116: self.image_folder_name="pageimg"
! 117: newtemplate=PageTemplateFile('products/OSA_system/OSAS_upload').__of__(self)
! 118: return newtemplate()
! 119:
! 120: def add5(self):
! 121: """ADD INDEX.META"""
! 122: newtemplate=PageTemplateFile('products/OSA_system/OSAS_add_metadata').__of__(self)
! 123: return newtemplate()
! 124:
! 125: def add6(self):
! 126: metadata=parse_query_string(self.REQUEST['QUERY_STRING'])
! 127: metadata['archive-path']=os.path.split(self.REQUEST.SESSION['path'])[0]
! 128: #metadata['folder_name']=self.REQUEST.SESSION['folder_name']
! 129: metadata['folder_name']=os.path.split(self.REQUEST.SESSION['path'])[1]
! 130: metadata['content-type']="scanned document"
! 131: self.reftype=self.REQUEST.SESSION['reftype']
! 132: self.REQUEST.SESSION['add_metadata']=metadata
! 133: self.add_metadata=metadata
! 134: self.metadata=self.REQUEST.SESSION['metadata']
! 135: self.metadataprint=""
! 136: for tag in self.metadata.keys():
! 137: self.metadataprint=self.metadataprint+"<"+tag+">"+self.metadata[tag]+"</"+tag+">\n"
! 138:
! 139: newtemplate=PageTemplateFile('products/OSA_system/index_meta').__of__(self)
! 140: newtemplate.content_type="text/plain"
! 141: renderxml = newtemplate()
! 142: if self.REQUEST.SESSION.has_key('no_upload'):
! 143: metapath=self.REQUEST.SESSION['path']+"/index.meta"
! 144: else:
! 145: metapath=self.add_metadata['archive-path']+"/"+self.add_metadata['folder_name']+"/index.meta"
! 146:
! 147: f=open(metapath,'w')
! 148: f.writelines(renderxml)
! 149: f.close()
! 150: os.chmod(metapath,0644)
! 151: if self.REQUEST.SESSION.has_key('no_upload'):
! 152:
! 153: #newtemplate2=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/done',"text/html").__of__(self)
! 154: return self.REQUEST.response.redirect(self.REQUEST['URL2']+"?path="+self.REQUEST.SESSION['path'])
! 155: else:
! 156: #print self.add_metadata['archive-path']
! 157: self.viewpath=re.search(r"/mpiwg/online/(.*)",self.add_metadata['archive-path']).group(1)
! 158: newtemplate2=PageTemplateFile('products/OSA_system/OSAS_saved').__of__(self)
! 159:
! 160:
! 161: newtemplate2.content_type="text/html"
! 162: self.REQUEST.response.setHeader('Content-Type','text/html')
! 163:
! 164:
! 165: return newtemplate2()
! 166:
! 167:
! 168: from time import localtime,strftime
! 169:
! 170: def date(self):
! 171: return strftime("%d.%m.%Y",localtime())
! 172:
! 173:
! 174: def addPresentation(self,path):
! 175: """add presentation to the path"""
! 176:
! 177: dom=xml.dom.minidom.parse(path+"/index.meta")
! 178:
! 179: try:
! 180: author=archive.getText(dom.getElementsByTagName('author')[0].childNodes)
! 181: except:
! 182: author=archive.getText(dom.getElementsByTagName('Author')[0].childNodes)
! 183: title=archive.getText(dom.getElementsByTagName('title')[0].childNodes)
! 184: try:
! 185: date=archive.getText(dom.getElementsByTagName('year')[0].childNodes)
! 186: except:
! 187: try:
! 188: date=archive.getText(dom.getElementsByTagName('Year')[0].childNodes)
! 189: except:
! 190: date=archive.getText(dom.getElementsByTagName('date')[0].childNodes)
! 191: i=1
! 192: while os.path.exists("%02d-presentation"%i):
! 193: i+=1
! 194: self.REQUEST.SESSION['presentationname']="%02d-presentation"%i
! 195: self.REQUEST.SESSION['path']=path
! 196: self.REQUEST.SESSION['xmlvorschlag']="""<info>
! 197: <author>%s</author>
! 198: <title>%s</title>
! 199: <date>%s</date>
! 200: <display>yes</display>
! 201: </info>"""%(author,title,date)
! 202:
! 203: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/addPresentation').__of__(self)
! 204: return newtemplate()
! 205:
! 206: def addPresentation2(self):
! 207: """add presentation """
! 208: self.folder_name=self.REQUEST['folder_name']
! 209: #print self.REQUEST['folder_name']
! 210: self.content_description=self.REQUEST['content_description']
! 211:
! 212: self.path=self.REQUEST.SESSION['path']
! 213:
! 214: if not self.REQUEST.has_key('fileupload'):
! 215: self.xmlinfo=self.REQUEST['xmltext']
! 216: file_name="info.xml"
! 217:
! 218: else:
! 219: file_name=self.REQUEST['fileupload'].filename
! 220: self.xmlinfo=self.REQUEST.form['fileupload'].read()
! 221: # hack dW
! 222: file_name="info.xml"
! 223: self.xmlinfo=self.REQUEST['xmltext']
! 224: try:
! 225: os.mkdir(self.path+"/"+self.folder_name)
! 226: except:
! 227: """nothing"""
! 228: print "NAME:",file_name
! 229: f=open(self.path+"/"+self.folder_name+"/"+file_name,"w")
! 230: f.write(self.xmlinfo)
! 231: f.close()
! 232: os.chmod(self.path+"/"+self.folder_name,0755)
! 233: os.chmod(self.path+"/"+self.folder_name+"/"+file_name,0644)
! 234: addDirsToIndexMeta(self.path,self.folder_name,self.content_description,'presentation')
! 235:
! 236: return self.REQUEST.RESPONSE.redirect('storefiles?path='+self.path)
! 237:
! 238: def addText(self,path):
! 239: """add fulltext to the path"""
! 240: self.REQUEST.SESSION['existing_names']=['pageimg'] # to be done generate list of existing text files
! 241: self.REQUEST.SESSION['path']=path
! 242: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/addText').__of__(self)
! 243: return newtemplate()
! 244:
! 245: def addText2(self):
! 246: self.folder_name=self.REQUEST['folder_name']
! 247: #print self.REQUEST['folder_name']
! 248: self.content_description=self.REQUEST['content_description']
! 249: self.path=self.REQUEST.SESSION['path']
! 250: self.file_name=self.REQUEST['fileupload'].filename
! 251: self.file=self.REQUEST.form['fileupload'].read()
! 252: os.mkdir(self.path+"/"+self.folder_name)
! 253: f=open(self.path+"/"+self.folder_name+"/"+self.file_name,"w")
! 254: f.write(self.file)
! 255: f.close()
! 256: os.chmod(self.path+"/"+self.folder_name,0755)
! 257: os.chmod(self.path+"/"+self.folder_name+"/"+self.file_name,0644)
! 258: addDirsToIndexMeta(self.path,self.folder_name,self.content_description,'fulltext')
! 259:
! 260: return self.REQUEST.RESPONSE.redirect('storefiles?path='+self.path)
! 261:
! 262: def addTextExternal(self,path,texturl,version):
! 263: """hinzufügen eines externen textes"""
! 264: try: #neue text version einlesen
! 265: texttemp=urllib.urlopen(texturl).readlines()
! 266: text=""
! 267: for line in texttemp:
! 268: text=text+line
! 269: except: #fehler beim lesen des textes
! 270: return "ERROR: cannot read: %s"%texturl
! 271: if TextExternalError(text): #kein xml header
! 272: return "ERROR: cannot read: %s"%texturl, "received:",text
! 273: textpath=getNewTextPath(path) #erzeuge neuen Ornder für den Text
! 274: splitted=string.split(texturl,"/")
! 275: name=splitted[len(splitted)-1] #Name des XML-files
! 276: try:
! 277: writefile=file(path+"/"+textpath+"/"+name,"w")
! 278: except:
! 279: return"ERROR: cannot write: %s"%path+"/"+textpath+"/"+name
! 280: writefile.write(text)
! 281: writefile.close()
! 282: os.chmod(path+"/"+textpath+"/"+name,0644)
! 283:
! 284: #add new file to XML
! 285: dom=xml.dom.minidom.parse(path+"/index.meta")
! 286: node=dom.getElementsByTagName('resource')[0] #getNode
! 287:
! 288: subnode=dom.createElement('dir')
! 289:
! 290: namenode=dom.createElement('name')
! 291: namenodetext=dom.createTextNode(textpath)
! 292: namenode.appendChild(namenodetext)
! 293: subnode.appendChild(namenode)
! 294:
! 295: descriptionnode=dom.createElement('description')
! 296: descriptionnodetext=dom.createTextNode('archimedes text:'+version)
! 297: descriptionnode.appendChild(descriptionnodetext)
! 298: subnode.appendChild(descriptionnode)
! 299:
! 300: contentnode=dom.createElement('content-type')
! 301: contentnodetext=dom.createTextNode('fulltext')
! 302: contentnode.appendChild(contentnodetext)
! 303: subnode.appendChild(contentnode)
! 304:
! 305: node.appendChild(subnode)
! 306:
! 307: writefile=file(path+"/index.meta","w")
! 308: writefile.write(dom.toxml().encode('utf-8'))
! 309: writefile.close()
! 310:
! 311: #change texttool tag
! 312: dom=xml.dom.minidom.parse(path+"/index.meta")
! 313: node=dom.getElementsByTagName('meta')[0] #getNode
! 314:
! 315: try: #texttool existiert schon
! 316: subnode=node.getElementsByTagName('texttool')[0]
! 317: except: #wenn nicht Fehler ausgeben
! 318: return "ERROR:no presentation configured yet, user Web Front End to do so!"
! 319:
! 320:
! 321: try:
! 322: texttoolnodelist=subnode.getElementsByTagName('text')
! 323:
! 324: if not len(texttoolnodelist)==0: #texttool tag existiert schon, dann löschen
! 325: subsubnode=subnode.removeChild(texttoolnodelist[0])
! 326: subsubnode.unlink()
! 327: except:
! 328: """nothing"""
! 329: # text neu anlegen
! 330: textfoldernode=dom.createElement('text')
! 331: textfoldernodetext=dom.createTextNode(textpath+"/"+name)
! 332: textfoldernode.appendChild(textfoldernodetext)
! 333: subnode.appendChild(textfoldernode)
! 334:
! 335: #index.meta ausgeben
! 336: writefile=file(path+"/index.meta","w")
! 337: writefile.write(dom.toxml().encode('utf-8'))
! 338: writefile.close()
! 339:
! 340: #registrieren
! 341: print urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
! 342:
! 343: return "DONE:"+textpath+"/"+name
! 344:
! 345: def TextExternalError(text):
! 346: firsts=text[0:10]
! 347: print firsts
! 348: try:
! 349: match=re.search(r".*<?xml.*",firsts)
! 350: except:
! 351: return 1
! 352: return 0
! 353:
! 354: def getNewTextPath(path):
! 355: i=1
! 356: while os.path.exists(path+"/fulltext%i"%i):
! 357: i+=1
! 358: os.mkdir(path+"/fulltext%i"%i)
! 359: os.chmod(path+"/fulltext%i"%i,0755)
! 360: return "fulltext%i"%i
! 361:
! 362: def addImages(self,path):
! 363: """Imagesfolder to the path"""
! 364: self.REQUEST.SESSION['existing_names']=['pageimg'] # to be done generate list of existing pageimages files
! 365: self.REQUEST.SESSION['path']=path
! 366: newtemplate=PageTemplateFile('products/OSA_system/OSAS_addImages').__of__(self)
! 367: return newtemplate()
! 368:
! 369: def addImages2(self):
! 370: self.image_folder_name=self.REQUEST['folder_name']
! 371: #print self.REQUEST['folder_name']
! 372: self.content_description=self.REQUEST['content_description']
! 373: #self.path=self.REQUEST.SESSION['path']
! 374:
! 375:
! 376: self.content_type='images'
! 377: addDirsToIndexMeta(self.REQUEST.SESSION['path'],self.image_folder_name,self.content_description,self.content_type)
! 378: self.REQUEST.SESSION['path']=re.search(r"/mpiwg(.*)",self.REQUEST.SESSION['path']).group(1)
! 379: newtemplate=PageTemplateFile('products/OSA_system/OSAS_upload2').__of__(self)
! 380: return newtemplate()
! 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
! 440: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/ImageandText').__of__(self)
! 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:
! 502: print urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
! 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']))
! 505: return self.REQUEST.RESPONSE.redirect('storefiles?path='+self.REQUEST['path'])
! 506:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>