--- documentViewer/documentViewer.py 2008/11/04 20:19:59 1.34 +++ documentViewer/documentViewer.py 2010/02/12 13:17:09 1.40 @@ -21,7 +21,7 @@ import logging import math import urlparse - +from types import * def logger(txt,method,txt2): """logging""" logging.info(txt+ txt2) @@ -139,7 +139,7 @@ class documentViewer(Folder): return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode) security.declareProtected('View','index_html') - def index_html(self,mode,url,viewMode="auto",start=None,pn=1): + def index_html(self,mode,url,viewMode="auto",start=None,pn=1,mk=None): ''' view it @param mode: defines how to access the document behind url @@ -167,9 +167,19 @@ class documentViewer(Folder): else: viewMode="images" - return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode) - + return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode,mk=self.generateMarks(mk)) + def generateMarks(self,mk): + ret="" + if mk is None: + return "" + + if type(mk) is not ListType: + mk=[mk] + for m in mk: + ret+="mk=%s"%m + return ret + def getLink(self,param=None,val=None): """link to documentviewer with parameter param set to val""" params=self.REQUEST.form.copy() @@ -179,6 +189,9 @@ class documentViewer(Folder): del params[param] else: params[param] = str(val) + if params["mode"] == "filepath": #wenn beim erst Aufruf filepath gesetzt wurde aendere das nun zu imagepath + params["mode"] = "imagepath" + params["url"] = getParentDir(params["url"]) # quote values and assemble into query string ps = "&".join(["%s=%s"%(k,urllib.quote(v)) for (k, v) in params.items()]) @@ -200,6 +213,7 @@ class documentViewer(Folder): ps = "&".join(["%s=%s"%(k,urllib.quote(v)) for (k, v) in params.items()]) url=self.REQUEST['URL1']+"?"+ps return url + def getInfo_xml(self,url,mode): """returns info about the document as XML""" @@ -240,12 +254,16 @@ class documentViewer(Folder): return False - def getDirinfoFromDigilib(self,path,docinfo=None): + def getDirinfoFromDigilib(self,path,docinfo=None,cut=0): """gibt param von dlInfo aus""" num_retries = 3 if docinfo is None: docinfo = {} - + + for x in range(cut): + + path=getParentDir(path) + infoUrl=self.digilibBaseUrl+"/dirInfo-xml.jsp?mo=dir&fn="+path logger("documentViewer (getparamfromdigilib)", logging.INFO, "dirInfo from %s"%(infoUrl)) @@ -286,7 +304,7 @@ class documentViewer(Folder): metaUrl=server+url.replace("/mpiwg/online","") if not metaUrl.endswith("index.meta"): metaUrl += "/index.meta" - print metaUrl + logging.debug("METAURL: %s"%metaUrl) for cnt in range(num_retries): try: # patch dirk encoding fehler treten dann nicht mehr auf @@ -320,6 +338,7 @@ class documentViewer(Folder): try: # patch dirk encoding fehler treten dann nicht mehr auf # dom = NonvalidatingReader.parseUri(metaUrl) + logging.debug("getpresentationinfoxml: metaurl=%s"%metaUrl) txt=urllib.urlopen(metaUrl).read() dom = Parse(txt) break @@ -342,7 +361,7 @@ class documentViewer(Folder): docinfo = {} if dom is None: - for x in range(cut+1): + for x in range(cut): path=getParentDir(path) dom = self.getIndexMeta(path) @@ -362,12 +381,13 @@ class documentViewer(Folder): if docinfo is None: docinfo = {} - + if dom is None: - for x in range(cut+1): + for x in range(cut): path=getParentDir(path) dom = self.getIndexMeta(path) - + + logging.debug("documentViewer (getbibinfofromindexmeta cutted) path: %s"%(path)) # put in all raw bib fields as dict "bib" bib = dom.xpath("//bib/*") if bib and len(bib)>0: @@ -463,6 +483,7 @@ class documentViewer(Folder): imageDir=imageDir.replace("/mpiwg/online",'') docinfo=self.getDirinfoFromDigilib(imageDir,docinfo=docinfo) docinfo['imagePath'] = imageDir + docinfo['imageURL'] = self.digilibBaseUrl+"/servlet/Scaler?fn="+imageDir viewerUrls=dom.xpath("//texttool/digiliburlprefix") @@ -485,9 +506,14 @@ class documentViewer(Folder): docinfo = self.getBibinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) # get info von bib tag if presentationUrls and (len(presentationUrls)>0): # ueberschreibe diese durch presentation informationen - # presentation url ergiebt sich ersetzen von index.meta in der url der fuer die Metadaten - # durch den relativen Pfad auf die presentation infos - presentationUrl=url.replace('index.meta',getTextFromNode(presentationUrls[0])) + # presentation url ergiebt sich ersetzen von index.meta in der url der fuer die Metadaten + # durch den relativen Pfad auf die presentation infos + presentationPath = getTextFromNode(presentationUrls[0]) + if url.endswith("index.meta"): + presentationUrl=url.replace('index.meta',presentationPath) + else: + presentationUrl=url + "/" + presentationPath + docinfo = self.getBibinfoFromTextToolPresentation(presentationUrl,docinfo=docinfo,dom=dom) docinfo = self.getAuthinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) # get access info @@ -519,12 +545,18 @@ class documentViewer(Folder): docinfo = {} path=path.replace("/mpiwg/online","") docinfo['imagePath'] = path - docinfo=self.getDirinfoFromDigilib(path,docinfo=docinfo) + docinfo=self.getDirinfoFromDigilib(path,docinfo=docinfo,cut=cut) + + pathorig=path + for x in range(cut): + path=getParentDir(path) + logging.error("PATH:"+path) imageUrl=self.digilibBaseUrl+"/servlet/Scaler?fn="+path docinfo['imageURL'] = imageUrl - docinfo = self.getBibinfoFromIndexMeta(path,docinfo=docinfo,cut=cut) - docinfo = self.getAuthinfoFromIndexMeta(path,docinfo=docinfo,cut=cut) + #path ist the path to the images it assumes that the index.meta file is one level higher. + docinfo = self.getBibinfoFromIndexMeta(pathorig,docinfo=docinfo,cut=cut+1) + docinfo = self.getAuthinfoFromIndexMeta(pathorig,docinfo=docinfo,cut=cut+1) return docinfo @@ -545,7 +577,7 @@ class documentViewer(Folder): elif mode=="imagepath": docinfo = self.getDocinfoFromImagePath(url, docinfo=docinfo) elif mode=="filepath": - docinfo = self.getDocinfoFromImagePath(url, docinfo=docinfo,cut=2) + docinfo = self.getDocinfoFromImagePath(url, docinfo=docinfo,cut=1) else: logger("documentViewer (getdocinfo)", logging.ERROR,"unknown mode!") raise ValueError("Unknown mode %s"%(mode)) @@ -576,7 +608,7 @@ class documentViewer(Folder): pageinfo['numgroups'] = int(np / grpsize) if np % grpsize > 0: pageinfo['numgroups'] += 1 - + return pageinfo def text(self,mode,url,pn):