--- ECHO_content/ECHO_collection.py 2004/10/27 16:05:55 1.185
+++ ECHO_content/ECHO_collection.py 2007/01/31 13:43:36 1.283
@@ -9,9 +9,18 @@ class ECHO_externalLink contains informa
"""
+try:
+ from reportlab.pdfgen import canvas
+ from reportlab.lib.pagesizes import A4
+except:
+ print "PDF generation will not work"
+
+import urlparse
import string
+import tempfile
+import zipfile
import re
-import os
+import os,shutil
import OFS.Image
from types import *
from OFS.Cache import Cacheable
@@ -26,543 +35,262 @@ from Globals import DTMLFile
import Globals
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from Products.PageTemplates.PageTemplate import PageTemplate
-from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
+from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate,manage_addPageTemplate
from Globals import Persistent, package_home
from Acquisition import Implicit
-from ECHO_helpers import displayTypes, getText,readFieldFromXML
+from Products.ZCatalog.CatalogPathAwareness import CatalogAware
+from Products.ZCTextIndex.ZCTextIndex import manage_addLexicon
+
import urllib
+import cgi
import smtplib
import time
from Ft.Xml.Domlette import NonvalidatingReader
-from Ft.Xml.Domlette import PrettyPrint
+from Ft.Xml.Domlette import PrettyPrint, Print
from Ft.Xml import EMPTY_NAMESPACE
import Ft.Xml.XPath
import cStringIO
import zLOG
+import sys
try:
- from psycopg import libpq
+ from psycopg import libpq
except:
- try:
- from pyPgSQL import libpq
- except:
- print "ECHO_collection: Warning - No libpq imported!"
-
+ try:
+ from pyPgSQL import libpq
+ except:
+ print "ECHO_collection: Warning - No libpq imported!"
+
import xml.dom.minidom
import urllib
import xml.dom.minidom
-from ECHO_graphicalOverview import javaHandler,javaScriptMain
import ECHO_helpers
+from ECHO_helpers import *
-def donatus(txt2):
- import xmlrpclib
-
- server = xmlrpclib.ServerProxy("http://archimedes.fas.harvard.edu/cgi-bin/donatus-rpc")
-
- txt=txt2.encode('utf-8')
- bin=xmlrpclib.Binary(txt)
-
-
-
- ret=server.donatus.analyze(bin)
-
-
- return ret['morphData'].data
-
-
-def donatusVariant2Lemma(morphData):
- """creates hash variant -> morphdata"""
- ret={}
- dom=xml.dom.minidom.parseString(morphData)
- lemmas=dom.getElementsByTagName('lemma')
- for lemma in lemmas:
- variants=lemma.getElementsByTagName('variant')
- for variant in variants:
- atr=variant.getAttribute('form')
- if ret.has_key(atr):
- ret[atr].append=lemma.getAttribute('form')
- else:
- ret[atr]=[lemma.getAttribute('form')]
-
- return ret
-
-#regexp for extracting elements from xml
-patternTXT=r"<\s*txt.*?>(.*?)"
-regexpTXT = re.compile(patternTXT, re.IGNORECASE + re.DOTALL)
-patternPage=r"<\s*page.*?>(.*?)"
-regexpPage = re.compile(patternPage, re.IGNORECASE + re.DOTALL)
-
-
-def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']):
- """Rerender all Links"""
- ret=""
-
- if not obj:
- obj = self
-
- entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource'],search_sub=1)
-
- for entry in entries:
- if entry[1].meta_type == 'ECHO_resource':
- try:
- entry[1].ECHO_getResourceMD(template="no")
- if "title" in types:
- entry[1].generate_title()
- if "label" in types:
- entry[1].generate_label()
- ret+="OK:"+entry[0]+"-- "+entry[1].getTitle().decode('utf-8')+"-- "+entry[1].getTitle().decode('utf-8')+"
"
- except:
- ret+="Error:"+entry[0]+"
"
-
-
-
-
- return "
Get Page: %i
\n"%i))
+ faktor=dpi/72.0
+
+ fn=tmpPath+"/%i"%i
+
+ width,height=A4
+ #print image%(width*faktor,height*faktor,i)
+ url=urllib.urlopen(image%(width*faktor,height*faktor,i)).read()
+ fh=file(fn,"w")
+ fh.write(url)
+ fh.close()
- def getAccessRightMD(self):
- """set accessright"""
- url=self.metalink
- try:
- geturl=""
- for line in ECHO_helpers.urlopen(url).readlines():
- geturl=geturl+line
+ c.drawImage(fn,0,0,width=width,height=height)
+ c.showPage()
+ c.save()
+ if RESPONSE:
+ RESPONSE.write("
finished
\n")
+
+ if RESPONSE:
+ len=os.stat(tmpZip)[6]
+ downloadUrl=self.absolute_url()+"/downloadPDF"
+ RESPONSE.write("""
The file will be stored for a while, you can download it later, the URL is:
+%s?fn=%s\n"""%(tmpFn,downloadUrl,tmpFn))
+ RESPONSE.close()
+
+
+ def downloadPDF(self,fn):
+ """download prepared set"""
+ filename="/tmp/archivesImageServer/"+fn
+ namePDF=self.getId()+".pdf"
+ self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%namePDF)
+ self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
+ len=os.stat(filename)[6]
+ self.REQUEST.RESPONSE.setHeader("Content-Length",len)
+ images=file(filename).read()
+ self.REQUEST.RESPONSE.write(images)
+ self.REQUEST.RESPONSE.close()
- except:
- return (None,"Cannot open: "+url)
+ def getRDF(self,urn=None):
+ """rdf"""
+ ret=getRDFDescription(self,self.link,urn=urn)
+ return ret+self.createSubElementRDF(urn=urn)
- try:
- dom=xml.dom.minidom.parseString(geturl)
- root=dom.getElementsByTagName('resource')[0]
- except:
- return (None,"Cannot parse: "+url+"
"+geturl)
-
- internal=dom.getElementsByTagName('internal')
- if internal:
- institution=dom.getElementsByTagName('institution')
- return getText(institution[0].childNodes)
-
- free=dom.getElementsByTagName('free')
- if free:
- return "free"
+
+ def changeAccessRightForm(self,preselect=None):
+ """change the access rights"""
+
+ pt=zptFile(self, 'zpt/ChangeECHO_resourceAccessRight.zpt')
+ return pt(preselect=preselect)
+
+ def changeAccessRight(self):
+ """changeRights"""
+ argv=self.REQUEST.form
+ self.setAccessRightXML(argv["%s_xml"%self.getId()])
+ self.accessRight=argv["%s_echo"%self.getId()]
+
+ self.REQUEST.RESPONSE.redirect('manage_main')
+
+
+ def getAccessRightSelectorHTML(self,outlook="select",xmldominant=None,preselect=None):
+ """htmlselector, xmldominant= in der regel wird der wert des xmlfiles ausgegeben ausser er existiert nicht"""
+ values=['','free','MPIWG']
+
+ if preselect:#set all to the preselected
+ ar=(preselect,preselect)
+ else:#else set to actual value
+ ar=self.getAccessRightMD()
+
+ if outlook=="select":
+ ret=""""
+ else:
+ if ar[0] is not None:
+ return ret+""
+ else:
+ return "
No xml file (only local selection):"+ret1 - return "free" #default free + else: + ret="" + ret1="" + for value in values: + + if value==ar[0]: + ret+="""%s"""%(self.getId(),value,value) + else: + ret+="""%s"""%(self.getId(),value,value) + + if value==ar[1]: + ret1+="""%s"""%(self.getId(),value,value) + else: + ret1+="""%s"""%(self.getId(),value,value) + + if not xmldominant: + return ret,ret1 + else: + if ar[0]: + return ret + else: + return "
No xml file (only local selection)
"+ret1 - def changeAccessRightMD(self,accessright,RESPONSE=None): - """change the rights""" - - params="accessright=%s"%accessright - #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read() + def copyAccessRightsFromMD(self): + """kopiere rechte aus den metadaten""" + self.accessRight=self.getAccessRightMD()[0] + + + + + + def getAccessRightMD(self): + """set accessright""" + url=self.metalink - - ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/setAccessRightXML'+urllib.quote('?'+params))).read() + try: + urllib.urlopen(url) + except: + zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + return None,getattr(self,'accessRight','') + + + try: + dom = NonvalidatingReader.parseUri(url) + except: + zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) + return (None,"Cannot parse: "+url+"OK: %s"%resource[0]) + else: + if RESPONSE is not None: + RESPONSE.write("
ERROR: %s (%s)"%(resource[1].absolute_url()+'/ECHO_resource_config_main',resource[0],msg)) + + + + if RESPONSE is not None: + RESPONSE.write("
Done
") + def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None): - """change the templates""" + """change the templates""" - resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) + resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) - for resource in resources: + for resource in resources: - resource[1].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix) + resource[1].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix) - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + if RESPONSE is not None: + RESPONSE.redirect('manage_main') def setStartpageFolderForm(self): - """Form for changing the startpage""" + """Form for changing the startpage""" - - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resourceStartPageFolder.zpt').__of__(self) + + pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPageFolder.zpt') pt.content_type="text/html" return pt() def setStartpageFolder(self,startpage=None,RESPONSE=None): - """change the templates""" + """change the templates""" - resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) + resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) - for resource in resources: + for resource in resources: - resource[1].setStartPage(startpage) + resource[1].setStartPage(startpage) - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + if RESPONSE is not None: + RESPONSE.redirect('manage_main') def copyTitleToInfoXMLFolder(self,RESPONSE=None): - """copy title into the title field of info.xml - author and date werden leer!!! - """ + """copy title into the title field of info.xml + author and date werden leer!!! + """ - - resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) - - for resource in resources: - ret,txt=resource[1].copyTitleToInfoXML() - if (not ret) and RESPONSE: - RESPONSE.write("error: %s\n"%txt) - if ret and RESPONSE: - RESPONSE.write("ok: %s\n"%txt) - - #zLOG.LOG("ECHO (copyTitleToInfoXMLFolder)",zLOG.INFO,txt) - if RESPONSE is not None: - RESPONSE.write("done!\n") - RESPONSE.close() - RESPONSE.redirect('manage_main') - + resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) + + + for resource in resources: + ret,txt=resource[1].copyTitleToInfoXML() + if (not ret) and RESPONSE: + RESPONSE.write("error: %s\n"%txt) + if ret and RESPONSE: + RESPONSE.write("ok: %s\n"%txt) + + #zLOG.LOG("ECHO (copyTitleToInfoXMLFolder)",zLOG.INFO,txt) + if RESPONSE is not None: + RESPONSE.write("done!\n") + RESPONSE.close() + RESPONSE.redirect('manage_main') + def copySearchFields(self,RESPONSE=None): - """copys import metadatafields to the object""" - resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource']) + """copys < metadatafields to the object""" + resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) - for resource in resources: + for resource in resources: - resource[1].copySearchFields() + resource[1].copySearchFields() - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + def reloadMetaDataFromStorageWarning(self,RESPONSE=None): - """warning""" - pt=PageTemplateFile('Products/ECHO_content/zpt/reloadMetaDataFromStorageWarning.zpt').__of__(self) + """warning""" + pt=zptFile(self, 'zpt/reloadMetaDataFromStorageWarning.zpt') pt.content_type="text/html" return pt() def reloadMetaDataFromStorage(self,RESPONSE=None): - """copy metadata from the storage to ECHO""" + """copy metadata from the storage to ECHO""" - return reloadMetaDataFromStorage(self,RESPONSE=None) + return reloadMetaDataFromStorage(self,RESPONSE) def getPartnerCopyright(self,name,sonst="generic"): - """gibt generisches copyright eines partners aus, sonst behalte jetzige einsteillung""" - #print "hi",name,sonst - #print getattr(self.partners,name).copyrightType - try: - partner=getattr(self.partners,name) - return partner.copyrightType - except: - print "error" - return sonst + """gibt generisches copyright eines partners aus, sonst behalte jetzige einsteillung""" + #print "hi",name,sonst + #print getattr(self.partners,name).copyrightType + try: + partner=getattr(self.partners,name) + return partner.copyrightType + except: + print "error" + return sonst def partnerSelector_HTML(self,selected=None): """give type selector""" - if not selected: - retStr="