File:  [Repository] / OSAS / OSA_system / OSAS_add.py
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Wed Oct 1 08:20:47 2003 UTC (20 years, 9 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
New files for upload and editing

    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>