version 1.33, 2008/11/04 19:51:35
|
version 1.42, 2010/03/08 15:02:33
|
Line 1
|
Line 1
|
|
|
|
|
from OFS.Folder import Folder |
from OFS.Folder import Folder |
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate |
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate |
from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
Line 11 from Ft.Xml.Domlette import Nonvalidatin
|
Line 10 from Ft.Xml.Domlette import Nonvalidatin
|
from Ft.Xml.Domlette import PrettyPrint, Print |
from Ft.Xml.Domlette import PrettyPrint, Print |
from Ft.Xml import EMPTY_NAMESPACE, Parse |
from Ft.Xml import EMPTY_NAMESPACE, Parse |
|
|
import Ft.Xml.XPath |
|
|
|
|
import Ft.Xml.XPath |
|
import xmlrpclib |
import os.path |
import os.path |
import sys |
import sys |
import cgi |
import cgi |
Line 21 import logging
|
Line 21 import logging
|
import math |
import math |
|
|
import urlparse |
import urlparse |
|
from types import * |
def logger(txt,method,txt2): |
def logger(txt,method,txt2): |
"""logging""" |
"""logging""" |
logging.info(txt+ txt2) |
logging.info(txt+ txt2) |
Line 139 class documentViewer(Folder):
|
Line 139 class documentViewer(Folder):
|
return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode) |
return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode) |
|
|
security.declareProtected('View','index_html') |
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 |
view it |
@param mode: defines how to access the document behind url |
@param mode: defines how to access the document behind url |
Line 167 class documentViewer(Folder):
|
Line 167 class documentViewer(Folder):
|
else: |
else: |
viewMode="images" |
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): |
def getLink(self,param=None,val=None): |
"""link to documentviewer with parameter param set to val""" |
"""link to documentviewer with parameter param set to val""" |
Line 179 class documentViewer(Folder):
|
Line 189 class documentViewer(Folder):
|
del params[param] |
del params[param] |
else: |
else: |
params[param] = str(val) |
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 |
# quote values and assemble into query string |
ps = "&".join(["%s=%s"%(k,urllib.quote(v)) for (k, v) in params.items()]) |
ps = "&".join(["%s=%s"%(k,urllib.quote(v)) for (k, v) in params.items()]) |
Line 200 class documentViewer(Folder):
|
Line 213 class documentViewer(Folder):
|
ps = "&".join(["%s=%s"%(k,urllib.quote(v)) for (k, v) in params.items()]) |
ps = "&".join(["%s=%s"%(k,urllib.quote(v)) for (k, v) in params.items()]) |
url=self.REQUEST['URL1']+"?"+ps |
url=self.REQUEST['URL1']+"?"+ps |
return url |
return url |
|
|
def getInfo_xml(self,url,mode): |
def getInfo_xml(self,url,mode): |
"""returns info about the document as XML""" |
"""returns info about the document as XML""" |
|
|
Line 219 class documentViewer(Folder):
|
Line 233 class documentViewer(Folder):
|
else: |
else: |
return style |
return style |
|
|
|
def getTextLanguage(self,url,docinfo): |
|
docinfo['lang']=getTextFromNode(dom.xpath("//bib/lang")[0]) |
|
lang = urlencode({'':docinfo['lang']}) |
|
return lang |
|
|
|
|
def isAccessible(self, docinfo): |
def isAccessible(self, docinfo): |
"""returns if access to the resource is granted""" |
"""returns if access to the resource is granted""" |
Line 240 class documentViewer(Folder):
|
Line 259 class documentViewer(Folder):
|
return False |
return False |
|
|
|
|
def getDirinfoFromDigilib(self,path,docinfo=None): |
def getDirinfoFromDigilib(self,path,docinfo=None,cut=0): |
"""gibt param von dlInfo aus""" |
"""gibt param von dlInfo aus""" |
num_retries = 3 |
num_retries = 3 |
if docinfo is None: |
if docinfo is None: |
docinfo = {} |
docinfo = {} |
|
|
|
for x in range(cut): |
|
|
|
path=getParentDir(path) |
|
|
infoUrl=self.digilibBaseUrl+"/dirInfo-xml.jsp?mo=dir&fn="+path |
infoUrl=self.digilibBaseUrl+"/dirInfo-xml.jsp?mo=dir&fn="+path |
|
|
logger("documentViewer (getparamfromdigilib)", logging.INFO, "dirInfo from %s"%(infoUrl)) |
logger("documentViewer (getparamfromdigilib)", logging.INFO, "dirInfo from %s"%(infoUrl)) |
Line 286 class documentViewer(Folder):
|
Line 309 class documentViewer(Folder):
|
metaUrl=server+url.replace("/mpiwg/online","") |
metaUrl=server+url.replace("/mpiwg/online","") |
if not metaUrl.endswith("index.meta"): |
if not metaUrl.endswith("index.meta"): |
metaUrl += "/index.meta" |
metaUrl += "/index.meta" |
print metaUrl |
logging.debug("METAURL: %s"%metaUrl) |
for cnt in range(num_retries): |
for cnt in range(num_retries): |
try: |
try: |
# patch dirk encoding fehler treten dann nicht mehr auf |
# patch dirk encoding fehler treten dann nicht mehr auf |
Line 342 class documentViewer(Folder):
|
Line 365 class documentViewer(Folder):
|
docinfo = {} |
docinfo = {} |
|
|
if dom is None: |
if dom is None: |
for x in range(cut+1): |
for x in range(cut): |
path=getParentDir(path) |
path=getParentDir(path) |
dom = self.getIndexMeta(path) |
dom = self.getIndexMeta(path) |
|
|
Line 364 class documentViewer(Folder):
|
Line 387 class documentViewer(Folder):
|
docinfo = {} |
docinfo = {} |
|
|
if dom is None: |
if dom is None: |
for x in range(cut+1): |
for x in range(cut): |
path=getParentDir(path) |
path=getParentDir(path) |
dom = self.getIndexMeta(path) |
dom = self.getIndexMeta(path) |
|
|
|
logging.debug("documentViewer (getbibinfofromindexmeta cutted) path: %s"%(path)) |
# put in all raw bib fields as dict "bib" |
# put in all raw bib fields as dict "bib" |
bib = dom.xpath("//bib/*") |
bib = dom.xpath("//bib/*") |
if bib and len(bib)>0: |
if bib and len(bib)>0: |
Line 407 class documentViewer(Folder):
|
Line 431 class documentViewer(Folder):
|
return docinfo |
return docinfo |
|
|
|
|
|
def getNumPages(self, xquery, docinfo=None): #New Method 24.02.2010 |
|
text=self.viewerTemplates.query.eval("/mpdl/interface/xquery.xql","document="+ docinfo['textURLPath'] +"&xquery="+str(xquery)) |
|
docinfo['numPages'] = text.count("<pb ") |
|
return docinfo |
|
|
|
|
def getDocinfoFromTextTool(self,url,dom=None,docinfo=None): |
def getDocinfoFromTextTool(self,url,dom=None,docinfo=None): |
"""parse texttool tag in index meta""" |
"""parse texttool tag in index meta""" |
logger("documentViewer (getdocinfofromtexttool)", logging.INFO,"url: %s"%(url)) |
logger("documentViewer (getdocinfofromtexttool)", logging.INFO,"url: %s"%(url)) |
Line 448 class documentViewer(Folder):
|
Line 478 class documentViewer(Folder):
|
imageDirs=dom.xpath("//texttool/image") |
imageDirs=dom.xpath("//texttool/image") |
if imageDirs and (len(imageDirs)>0): |
if imageDirs and (len(imageDirs)>0): |
imageDir=getTextFromNode(imageDirs[0]) |
imageDir=getTextFromNode(imageDirs[0]) |
|
|
else: |
else: |
# we balk with no image tag / not necessary anymore because textmode is now standard |
# we balk with no image tag / not necessary anymore because textmode is now standard |
#raise IOError("No text-tool info in %s"%(url)) |
#raise IOError("No text-tool info in %s"%(url)) |
imageDir="" |
imageDir="" |
docinfo['numPages']=1 # im moment einfach auf eins setzen, navigation ueber die thumbs geht natuerlich nicht |
#xquery="//pb" |
|
|
docinfo['imagePath'] = "" # keine Bilder |
docinfo['imagePath'] = "" # keine Bilder |
docinfo['imageURL'] = "" |
docinfo['imageURL'] = "" |
|
|
Line 463 class documentViewer(Folder):
|
Line 493 class documentViewer(Folder):
|
imageDir=imageDir.replace("/mpiwg/online",'') |
imageDir=imageDir.replace("/mpiwg/online",'') |
docinfo=self.getDirinfoFromDigilib(imageDir,docinfo=docinfo) |
docinfo=self.getDirinfoFromDigilib(imageDir,docinfo=docinfo) |
docinfo['imagePath'] = imageDir |
docinfo['imagePath'] = imageDir |
|
|
docinfo['imageURL'] = self.digilibBaseUrl+"/servlet/Scaler?fn="+imageDir |
docinfo['imageURL'] = self.digilibBaseUrl+"/servlet/Scaler?fn="+imageDir |
|
|
viewerUrls=dom.xpath("//texttool/digiliburlprefix") |
viewerUrls=dom.xpath("//texttool/digiliburlprefix") |
Line 481 class documentViewer(Folder):
|
Line 512 class documentViewer(Folder):
|
|
|
docinfo['textURL'] = textUrl |
docinfo['textURL'] = textUrl |
|
|
|
textUrls=dom.xpath("//texttool/text-url-path") |
|
if textUrls and (len(textUrls)>0): |
|
textUrl=getTextFromNode(textUrls[0]) |
|
docinfo['textURLPath'] = textUrl |
|
|
presentationUrls=dom.xpath("//texttool/presentation") |
presentationUrls=dom.xpath("//texttool/presentation") |
docinfo = self.getBibinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) # get info von bib tag |
docinfo = self.getBibinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) # get info von bib tag |
|
|
if presentationUrls and (len(presentationUrls)>0): # ueberschreibe diese durch presentation informationen |
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 |
# presentation url ergiebt sich ersetzen von index.meta in der url der fuer die Metadaten |
# durch den relativen Pfad auf die presentation infos |
# durch den relativen Pfad auf die presentation infos |
presentationUrl=url.replace('index.meta',getTextFromNode(presentationUrls[0])) |
presentationPath = getTextFromNode(presentationUrls[0]) |
|
if url.endswith("index.meta"): |
|
presentationUrl=url.replace('index.meta',presentationPath) |
|
else: |
|
presentationUrl=url + "/" + presentationPath |
|
docinfo=self.getNumPages('//pb', docinfo) #im moment einfach auf eins setzen, navigation ueber die thumbs geht natuerlich nicht |
docinfo = self.getBibinfoFromTextToolPresentation(presentationUrl,docinfo=docinfo,dom=dom) |
docinfo = self.getBibinfoFromTextToolPresentation(presentationUrl,docinfo=docinfo,dom=dom) |
|
|
docinfo = self.getAuthinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) # get access info |
docinfo = self.getAuthinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) # get access info |
|
|
return docinfo |
return docinfo |
|
|
|
|
Line 519 class documentViewer(Folder):
|
Line 561 class documentViewer(Folder):
|
docinfo = {} |
docinfo = {} |
path=path.replace("/mpiwg/online","") |
path=path.replace("/mpiwg/online","") |
docinfo['imagePath'] = path |
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 |
imageUrl=self.digilibBaseUrl+"/servlet/Scaler?fn="+path |
docinfo['imageURL'] = imageUrl |
docinfo['imageURL'] = imageUrl |
|
|
docinfo = self.getBibinfoFromIndexMeta(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.getAuthinfoFromIndexMeta(path,docinfo=docinfo,cut=cut) |
docinfo = self.getBibinfoFromIndexMeta(pathorig,docinfo=docinfo,cut=cut+1) |
|
docinfo = self.getAuthinfoFromIndexMeta(pathorig,docinfo=docinfo,cut=cut+1) |
return docinfo |
return docinfo |
|
|
|
|
Line 571 class documentViewer(Folder):
|
Line 619 class documentViewer(Folder):
|
pageinfo['start'] = start |
pageinfo['start'] = start |
pageinfo['end'] = start + grpsize |
pageinfo['end'] = start + grpsize |
if docinfo is not None: |
if docinfo is not None: |
|
|
np = int(docinfo['numPages']) |
np = int(docinfo['numPages']) |
pageinfo['end'] = min(pageinfo['end'], np) |
pageinfo['end'] = min(pageinfo['end'], np) |
pageinfo['numgroups'] = int(np / grpsize) |
pageinfo['numgroups'] = int(np / grpsize) |