--- ECHO_content/ECHO_resource.py 2008/12/04 21:27:00 1.1 +++ ECHO_content/ECHO_resource.py 2012/09/03 14:48:22 1.6.2.6 @@ -1,3 +1,6 @@ +#TODO: change metaDataHash, jetzt tag -> data(tags aus dem neuen Metadatamain) +#TODO: contentType aus den Metadaten + import urlparse import string import tempfile @@ -23,17 +26,20 @@ from Globals import Persistent, package_ from Acquisition import Implicit from Products.ZCatalog.CatalogPathAwareness import CatalogAware from Products.ZCTextIndex.ZCTextIndex import manage_addLexicon -from Products.MetaDataProvider.MetaDataClient import MetaDataClient +try: + from Products.MetaDataProvider.MetaDataClient import MetaDataClient +except: + print "no metadata services" import urllib import urllib2 import cgi import smtplib import time -from Ft.Xml.Domlette import NonvalidatingReader -from Ft.Xml.Domlette import PrettyPrint, Print -from Ft.Xml import EMPTY_NAMESPACE - -import Ft.Xml.XPath +#from Ft.Xml.Domlette import NonvalidatingReader +#from Ft.Xml.Domlette import PrettyPrint, Print +#from Ft.Xml import EMPTY_NAMESPACE +# +#import Ft.Xml.XPath import cStringIO import sys @@ -55,7 +61,7 @@ from ECHO_helpers import * from ECHO_movie import * -import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen +#import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen import xmlrpclib import logging @@ -66,13 +72,38 @@ class ECHO_resource(CatalogAware,Folder, meta_type='ECHO_resource' default_catalog='resourceCatalog' -# viewClassificationList=viewClassificationListMaster - + # viewClassificationList=viewClassificationListMaster + + + + def PrincipiaSearchSource(self): """Return cataloguable key for ourselves.""" return str(self) - + + def getDCDate(self): + """dc mapped date""" + try: + bibdata=self.getMetaDataManager().getBibData(path=self.getMetaDataLink()) + dcMapped = self.getMetaDataManager().getDCMappedData(bibdata) + return dcMapped.get('date') + except: + + logging.error("getDCDate doesn't work, cannot read metadata:"+self.getId()) + + getSubCols = ECHO_helpers.getSubCols + +# def getMetaDataManager(self): +# """hole eine Instanz von MetaDataFolder +# TODO: sollte konfigurierbar sein. +# zur Zeit wird enfach nur self.metadata falls vorhanden zurueckggegeben. +# """ +# +# mf= getattr(self,"metadataFolder",None) +# #logging.debug("MetadataManager:"+repr(mf)) +# return mf +# def index_meta(self,RESPONSE=None): """ gibt das im metalink gespeicher xml-file zurueck""" @@ -116,92 +147,15 @@ class ECHO_resource(CatalogAware,Folder, self.reindex_object() - security.declareProtected('View','createPDF') - def createPDF(self,RESPONSE=None,local=None,dpi=150): - """erzeuge pdf file""" - pages=1 - dpi=float(dpi) - imagePath=self.getImagePath().replace("/mpiwg/online","") - - - image="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler?fn="+imagePath+"&dw=%i&dh=%i&pn=%i" - xmlInfo="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/dlInfo-xml.jsp?fn="+imagePath - - dom=xml.dom.minidom.parse(urllib.urlopen(xmlInfo)) - for parameter in dom.getElementsByTagName('parameter'): - if parameter.getAttribute('name')=="pt": - pages=int(parameter.getAttribute('value')) - break - - - tempdir="/tmp/archivesImageServer" - if not os.path.exists(tempdir): - os.mkdir(tempdir) - - tmpPath=tempfile.mkdtemp(dir=tempdir) - - - tmpZip=tempfile.mktemp(dir=tempdir) - - tmpFn=os.path.split(tmpZip)[1] - - - - - if RESPONSE: - RESPONSE.setHeader("Content-Type","text/html") - RESPONSE.write("
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()
-
-
-
- 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 getRDF(self,urn=None):
"""rdf"""
- ret=getRDFDescription(self,self.link,urn=urn)
+ ap = self.getArchivePathFromMetadata()
+
+
+ ret=getRDFDescription(self,self.link,urn=urn,ap=ap)
+
return ret+self.createSubElementRDF(urn=urn)
@@ -416,20 +370,12 @@ class ECHO_resource(CatalogAware,Folder,
server.writeMetaDataFile(path,string,"yes")
- def setStartPageForm(self):
- """Form for changing the startpage"""
-
-
- pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPage.zpt')
- pt.content_type="text/html"
- return pt()
-
def createImageUrl(self,pn=1):
"""create ImageUrl"""
- resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')
+ resourcepath=readFieldFromXML_xpath(self.metalink,'//resource/archive-path')
digiliburlprefix=readFieldFromXML(self.metalink,'texttool','digiliburlprefix')
images=readFieldFromXML(self.metalink,'texttool','image')
@@ -448,7 +394,7 @@ class ECHO_resource(CatalogAware,Folder,
def copyTitleToInfoXML(self,RESPONSE=None):
"""copy title from the resource"""
presentationXML=readFieldFromXML(self.metalink,'texttool','presentation')
- resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')
+ resourcepath=readFieldFromXML_xpath(self.metalink,'//resource/archive-path')
if (not presentationXML) or (not resourcepath):
if RESPONSE:
RESPONSE.write("Error: %s\n"%self.getId())
@@ -472,58 +418,7 @@ class ECHO_resource(CatalogAware,Folder,
return None,self.absolute_url()
- def setStartPage(self,startpage=None,RESPONSE=None):
- """set start page, if no startpage defined use the generic one of the resource"""
- if (not (type(startpage)==StringType)):
- if ("__generic" in startpage): # checke ob generic in der liste
- startpage=self.absolute_url()+"/startpage_html"
- elif ("__firstPage" in startpage): # checke ob generic in der liste
- startpage=self.createImageUrl()
-
- if (not startpage):
- startpage=self.absolute_url()+"/startpage_html"
- elif (startpage=="__generic"):
- startpage=self.absolute_url()+"/startpage_html"
- elif (startpage=="__firstPage"):
- startpage=self.createImageUrl()
-
- params="startpage=%s"%startpage
- #print 'http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))
-
- tries=0
- for i in range(10):
- x=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()+'/newMetaXML'+urllib.quote('?'+params))).read()
- if x=="ok":
-
- break;
-
-
- path=self.metalink
-
- path=re.sub(self.REQUEST['SERVER_URL'],'',path)
- path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path)
-
- path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
- path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server
- path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server
- path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server
- path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server
- path=re.sub('http://vision.mpiwg-berlin.mpg.de','',path) # falls vision als server
- path=re.sub('http://xserve02.mpiwg-berlin.mpg.de:18880','',path) # falls vision als server
- path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo
- path=re.sub('/index.meta','',path)
-
-
- ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
-
- if RESPONSE is not None:
- RESPONSE.redirect('manage_main')
-
- def changeViewerTemplateSetForm(self):
- """change the viewer template set"""
- pt=zptFile(self, 'zpt/changeResourceViewerTemplateSet')
- return pt()
def setLink(self, link=None):
@@ -550,49 +445,7 @@ class ECHO_resource(CatalogAware,Folder,
return default
- def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):
- """changeit"""
-
- paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate','digiliburlprefix']
-
-
- #writeMetadata(self.metalink,self.metaDataHash,project,None,xslt,thumbtemplate,topbar,digiLibTemplate)
-
- params="project=%s&xslt=%s&thumbtemplate=%s&topbar=%s&digiLibTemplate=%s&digiliburlprefix=%s"%(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix)
-
- try:
- tries=0
- for i in range(10):
- x=ECHO_helpers.urlopen('http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read()
- if x=="ok":
-
- break;
-
- except:
- logger("ECHO_ressource (changeViewerTemplateSet)", logging.ERROR,"%s (%s)"%sys.exc_info()[0:2])
- logger("ECHO_ressource (changeViewerTemplateSet)", logging.ERROR,'http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params)))
- #print self.absolute_url()+'/newMetaXML'+urllib.quote'?'+params)
- # hack Pfad auf die Dokumente
- path=self.metalink
-
-
-
- path=re.sub('/index.meta','',path)
-
- #TODO: direct access to the file system necessary, fix that also xmlrpc to the server where the index file is stored is possible
- parsedUrl=urlparse.urlparse(path)
- path=parsedUrl[2]
- try:
- return ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
- except:
- logger("ECHO_Resource (changeViewerTemplateSet)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2])
- logger("ECHO_Resource (changeViewerTemplateSet)", logging.INFO,"http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path)
-
- if RESPONSE is not None:
- RESPONSE.redirect('manage_main')
-
-
security.declarePublic('content_html')
def content_html(self):
@@ -645,17 +498,18 @@ class ECHO_resource(CatalogAware,Folder,
"""gibt pfad zum image aus"""
return self.getImageView(noredirect="yes",onlyPath="yes")
+ def getArchivePathFromMetadata(self):
+ try:
+ archivePath=readFieldFromXML_xpath(self.metalink,"//resource/archive-path")
+ return archivePath
+ except:
+ return ""
+
def getImageView(self,noredirect=None,onlyPath=None):
"""getImages; give Imageviewr and