--- ECHO_content/ECHO_collection.py 2004/10/27 16:05:55 1.185
+++ ECHO_content/ECHO_collection.py 2007/01/23 16:50:11 1.281
@@ -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)
+try:
+ from ECHO_language import *
+except:
+ print "no echo_language"
+ class ECHO_language:
+ """ leere Klasse"""
+ pass
-
+from ECHO_movie import *
+import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen
+import xmlrpclib
+
- ret=server.donatus.analyze(bin)
-
- return ret['morphData'].data
+def normalizeCt(str):
+ """normalizes content_type"""
+ #str= str.replace(" ","_")
+ return str.replace("-"," ").lower()
-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 setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs=""):
-
-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
- except:
- return (None,"Cannot open: "+url)
+ 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()
- 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"
+
- return "free" #default free
+ 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() - def changeAccessRightMD(self,accessright,RESPONSE=None): - """change the rights""" - - params="accessright=%s"%accessright + def getRDF(self,urn=None): + """rdf""" + ret=getRDFDescription(self,self.link,urn=urn) + return ret+self.createSubElementRDF(urn=urn) + + + 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 - #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read() + 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 - - 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() - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - - def setAccessRightXML(self,accessright): - """set accessright""" - url=self.metalink + def copyAccessRightsFromMD(self): + """kopiere rechte aus den metadaten""" + self.accessRight=self.getAccessRightMD()[0] + + + + + + def getAccessRightMD(self): + """set accessright""" + url=self.metalink - try: - geturl="" - for line in ECHO_helpers.urlopen(url).readlines(): - geturl=geturl+line + try: + urllib.urlopen(url) + except: + zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) + 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!!! - """ - - - 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') - + """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') + 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="