|
|
| version 1.21, 2007/01/11 20:27:17 | version 1.24, 2007/05/03 17:28:23 |
|---|---|
| Line 18 import sys | Line 18 import sys |
| import cgi | import cgi |
| import urllib | import urllib |
| import logging | import logging |
| import zLOG | |
| import urlparse | import urlparse |
| def logger(txt,method,txt2): | |
| """logging""" | |
| logging.info(txt+ txt2) | |
| def getInt(number, default=0): | def getInt(number, default=0): |
| """returns always an int (0 in case of problems)""" | """returns always an int (0 in case of problems)""" |
| try: | try: |
| Line 109 class documentViewer(Folder): | Line 114 class documentViewer(Folder): |
| ''' | ''' |
| zLOG.LOG("documentViewer (index)", zLOG.INFO, "mode: %s url:%s start:%s pn:%s"%(mode,url,start,pn)) | logger("documentViewer (index)", logging.INFO, "mode: %s url:%s start:%s pn:%s"%(mode,url,start,pn)) |
| if not hasattr(self, 'template'): | if not hasattr(self, 'template'): |
| # create template folder if it doesn't exist | # create template folder if it doesn't exist |
| Line 128 class documentViewer(Folder): | Line 133 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) |
| Line 149 class documentViewer(Folder): | Line 155 class documentViewer(Folder): |
| def getStyle(self, idx, selected, style=""): | def getStyle(self, idx, selected, style=""): |
| """returns a string with the given style and append 'sel' if path == selected.""" | """returns a string with the given style and append 'sel' if path == selected.""" |
| #zLOG.LOG("documentViewer (getstyle)", zLOG.INFO, "idx: %s selected: %s style: %s"%(idx,selected,style)) | #logger("documentViewer (getstyle)", logging.INFO, "idx: %s selected: %s style: %s"%(idx,selected,style)) |
| if idx == selected: | if idx == selected: |
| return style + 'sel' | return style + 'sel' |
| else: | else: |
| Line 159 class documentViewer(Folder): | Line 165 class documentViewer(Folder): |
| def isAccessible(self, docinfo): | def isAccessible(self, docinfo): |
| """returns if access to the resource is granted""" | """returns if access to the resource is granted""" |
| access = docinfo.get('accessType', None) | access = docinfo.get('accessType', None) |
| zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "access type %s"%access) | logger("documentViewer (accessOK)", logging.INFO, "access type %s"%access) |
| if access is not None and access == 'free': | if access is not None and access == 'free': |
| zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "access is free") | logger("documentViewer (accessOK)", logging.INFO, "access is free") |
| return True | return True |
| elif access is None or access in self.authgroups: | elif access is None or access in self.authgroups: |
| # only local access -- only logged in users | # only local access -- only logged in users |
| Line 172 class documentViewer(Folder): | Line 178 class documentViewer(Folder): |
| else: | else: |
| return False | return False |
| zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "unknown access type %s"%access) | logger("documentViewer (accessOK)", logging.INFO, "unknown access type %s"%access) |
| return False | return False |
| Line 184 class documentViewer(Folder): | Line 190 class documentViewer(Folder): |
| infoUrl=self.digilibBaseUrl+"/dirInfo-xml.jsp?mo=dir&fn="+path | infoUrl=self.digilibBaseUrl+"/dirInfo-xml.jsp?mo=dir&fn="+path |
| zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo from %s"%(infoUrl)) | logger("documentViewer (getparamfromdigilib)", logging.INFO, "dirInfo from %s"%(infoUrl)) |
| for cnt in range(num_retries): | for cnt in range(num_retries): |
| try: | try: |
| Line 193 class documentViewer(Folder): | Line 199 class documentViewer(Folder): |
| dom = Parse(txt) | dom = Parse(txt) |
| break | break |
| except: | except: |
| zLOG.LOG("documentViewer (getdirinfofromdigilib)", zLOG.ERROR, "error reading %s (try %d)"%(infoUrl,cnt)) | logger("documentViewer (getdirinfofromdigilib)", logging.ERROR, "error reading %s (try %d)"%(infoUrl,cnt)) |
| else: | else: |
| raise IOError("Unable to get dir-info from %s"%(infoUrl)) | raise IOError("Unable to get dir-info from %s"%(infoUrl)) |
| sizes=dom.xpath("//dir/size") | sizes=dom.xpath("//dir/size") |
| zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo:size"%sizes) | logger("documentViewer (getparamfromdigilib)", logging.INFO, "dirInfo:size"%sizes) |
| if sizes: | if sizes: |
| docinfo['numPages'] = int(getTextFromNode(sizes[0])) | docinfo['numPages'] = int(getTextFromNode(sizes[0])) |
| Line 231 class documentViewer(Folder): | Line 237 class documentViewer(Folder): |
| dom = Parse(txt) | dom = Parse(txt) |
| break | break |
| except: | except: |
| zLOG.LOG("ERROR documentViewer (getIndexMata)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) | logger("ERROR documentViewer (getIndexMata)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) |
| if dom is None: | if dom is None: |
| raise IOError("Unable to read index meta from %s"%(url)) | raise IOError("Unable to read index meta from %s"%(url)) |
| Line 260 class documentViewer(Folder): | Line 266 class documentViewer(Folder): |
| dom = Parse(txt) | dom = Parse(txt) |
| break | break |
| except: | except: |
| zLOG.LOG("ERROR documentViewer (getPresentationInfoXML)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) | logger("ERROR documentViewer (getPresentationInfoXML)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) |
| if dom is None: | if dom is None: |
| raise IOError("Unable to read infoXMLfrom %s"%(url)) | raise IOError("Unable to read infoXMLfrom %s"%(url)) |
| Line 270 class documentViewer(Folder): | Line 276 class documentViewer(Folder): |
| def getAuthinfoFromIndexMeta(self,path,docinfo=None,dom=None): | def getAuthinfoFromIndexMeta(self,path,docinfo=None,dom=None): |
| """gets authorization info from the index.meta file at path or given by dom""" | """gets authorization info from the index.meta file at path or given by dom""" |
| zLOG.LOG("documentViewer (getauthinfofromindexmeta)", zLOG.INFO,"path: %s"%(path)) | logger("documentViewer (getauthinfofromindexmeta)", logging.INFO,"path: %s"%(path)) |
| access = None | access = None |
| Line 292 class documentViewer(Folder): | Line 298 class documentViewer(Folder): |
| def getBibinfoFromIndexMeta(self,path,docinfo=None,dom=None): | def getBibinfoFromIndexMeta(self,path,docinfo=None,dom=None): |
| """gets bibliographical info from the index.meta file at path or given by dom""" | """gets bibliographical info from the index.meta file at path or given by dom""" |
| zLOG.LOG("documentViewer (getbibinfofromindexmeta)", zLOG.INFO,"path: %s"%(path)) | logger("documentViewer (getbibinfofromindexmeta)", logging.INFO,"path: %s"%(path)) |
| if docinfo is None: | if docinfo is None: |
| docinfo = {} | docinfo = {} |
| Line 315 class documentViewer(Folder): | Line 321 class documentViewer(Folder): |
| docinfo['title']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['title'][0])[0]) | docinfo['title']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['title'][0])[0]) |
| docinfo['year']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['year'][0])[0]) | docinfo['year']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['year'][0])[0]) |
| logging.info("bla") | |
| try: | |
| docinfo['lang']=getTextFromNode(dom.xpath("//bib/lang")[0]) | |
| except: | |
| docinfo['lang']='' | |
| return docinfo | 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""" |
| zLOG.LOG("documentViewer (getdocinfofromtexttool)", zLOG.INFO,"url: %s"%(url)) | logger("documentViewer (getdocinfofromtexttool)", logging.INFO,"url: %s"%(url)) |
| if docinfo is None: | if docinfo is None: |
| docinfo = {} | docinfo = {} |
| if docinfo.get('lang',None) is None: | |
| docinfo['lang']='' # default keine Sprache gesetzt | |
| if dom is None: | if dom is None: |
| dom = self.getIndexMeta(url) | dom = self.getIndexMeta(url) |
| Line 334 class documentViewer(Folder): | Line 347 class documentViewer(Folder): |
| if archiveNames and (len(archiveNames)>0): | if archiveNames and (len(archiveNames)>0): |
| archiveName=getTextFromNode(archiveNames[0]) | archiveName=getTextFromNode(archiveNames[0]) |
| else: | else: |
| zLOG.LOG("documentViewer (getdocinfofromtexttool)", zLOG.WARNING,"resource/name missing in: %s"%(url)) | logger("documentViewer (getdocinfofromtexttool)", logging.WARNING,"resource/name missing in: %s"%(url)) |
| archivePaths=dom.xpath("//resource/archive-path") | archivePaths=dom.xpath("//resource/archive-path") |
| if archivePaths and (len(archivePaths)>0): | if archivePaths and (len(archivePaths)>0): |
| Line 346 class documentViewer(Folder): | Line 359 class documentViewer(Folder): |
| archivePath += "/" + archiveName | archivePath += "/" + archiveName |
| else: | else: |
| # try to get archive-path from url | # try to get archive-path from url |
| zLOG.LOG("documentViewer (getdocinfofromtexttool)", zLOG.WARNING,"resource/archive-path missing in: %s"%(url)) | logger("documentViewer (getdocinfofromtexttool)", logging.WARNING,"resource/archive-path missing in: %s"%(url)) |
| if (not url.startswith('http')): | if (not url.startswith('http')): |
| archivePath = url.replace('index.meta', '') | archivePath = url.replace('index.meta', '') |
| Line 358 class documentViewer(Folder): | Line 371 class documentViewer(Folder): |
| 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 | # 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="" | |
| docinfo['numPages']=1 # im moment einfach auf eins setzen, navigation ueber die thumbs geht natuerlich nicht | |
| docinfo['imagePath'] = "" # keine Bilder | |
| docinfo['imageURL'] = "" | |
| if imageDir and archivePath: | if imageDir and archivePath: |
| #print "image: ", imageDir, " archivepath: ", archivePath | #print "image: ", imageDir, " archivepath: ", archivePath |
| Line 382 class documentViewer(Folder): | Line 400 class documentViewer(Folder): |
| docinfo['textURL'] = textUrl | docinfo['textURL'] = textUrl |
| presentationUrls=dom.xpath("//texttool/presentation") | presentationUrls=dom.xpath("//texttool/presentation") |
| if presentationUrls and (len(presentationUrls)>0): | 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 fŸr die Metadaten | # presentation url ergiebt sich ersetzen von index.meta in der url der fŸr 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])) | presentationUrl=url.replace('index.meta',getTextFromNode(presentationUrls[0])) |
| docinfo = self.getBibinfoFromTextToolPresentation(presentationUrl,docinfo=docinfo,dom=dom) | docinfo = self.getBibinfoFromTextToolPresentation(presentationUrl,docinfo=docinfo,dom=dom) |
| else: | |
| docinfo = self.getBibinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) | docinfo = self.getAuthinfoFromIndexMeta(path,docinfo=docinfo) |
| docinfo = self.getAuthinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) | |
| return docinfo | return docinfo |
| Line 407 class documentViewer(Folder): | Line 424 class documentViewer(Folder): |
| def getDocinfoFromImagePath(self,path,docinfo=None): | def getDocinfoFromImagePath(self,path,docinfo=None): |
| """path ist the path to the images it assumes that the index.meta file is one level higher.""" | """path ist the path to the images it assumes that the index.meta file is one level higher.""" |
| zLOG.LOG("documentViewer (getdocinfofromimagepath)", zLOG.INFO,"path: %s"%(path)) | logger("documentViewer (getdocinfofromimagepath)", logging.INFO,"path: %s"%(path)) |
| if docinfo is None: | if docinfo is None: |
| docinfo = {} | docinfo = {} |
| path=path.replace("/mpiwg/online","") | path=path.replace("/mpiwg/online","") |
| Line 423 class documentViewer(Folder): | Line 440 class documentViewer(Folder): |
| def getDocinfo(self, mode, url): | def getDocinfo(self, mode, url): |
| """returns docinfo depending on mode""" | """returns docinfo depending on mode""" |
| zLOG.LOG("documentViewer (getdocinfo)", zLOG.INFO,"mode: %s, url: %s"%(mode,url)) | logger("documentViewer (getdocinfo)", logging.INFO,"mode: %s, url: %s"%(mode,url)) |
| # look for cached docinfo in session | # look for cached docinfo in session |
| if self.REQUEST.SESSION.has_key('docinfo'): | if self.REQUEST.SESSION.has_key('docinfo'): |
| docinfo = self.REQUEST.SESSION['docinfo'] | docinfo = self.REQUEST.SESSION['docinfo'] |
| # check if its still current | # check if its still current |
| if docinfo is not None and docinfo.get('mode') == mode and docinfo.get('url') == url: | if docinfo is not None and docinfo.get('mode') == mode and docinfo.get('url') == url: |
| zLOG.LOG("documentViewer (getdocinfo)", zLOG.INFO,"docinfo in session: %s"%docinfo) | logger("documentViewer (getdocinfo)", logging.INFO,"docinfo in session: %s"%docinfo) |
| return docinfo | return docinfo |
| # new docinfo | # new docinfo |
| docinfo = {'mode': mode, 'url': url} | docinfo = {'mode': mode, 'url': url} |
| Line 438 class documentViewer(Folder): | Line 455 class documentViewer(Folder): |
| elif mode=="imagepath": | elif mode=="imagepath": |
| docinfo = self.getDocinfoFromImagePath(url, docinfo=docinfo) | docinfo = self.getDocinfoFromImagePath(url, docinfo=docinfo) |
| else: | else: |
| zLOG.LOG("documentViewer (getdocinfo)", zLOG.ERROR,"unknown mode!") | logger("documentViewer (getdocinfo)", logging.ERROR,"unknown mode!") |
| raise ValueError("Unknown mode %s"%(mode)) | raise ValueError("Unknown mode %s"%(mode)) |
| zLOG.LOG("documentViewer (getdocinfo)", zLOG.INFO,"docinfo: %s"%docinfo) | logger("documentViewer (getdocinfo)", logging.INFO,"docinfo: %s"%docinfo) |
| self.REQUEST.SESSION['docinfo'] = docinfo | self.REQUEST.SESSION['docinfo'] = docinfo |
| return docinfo | return docinfo |
| Line 590 def manage_addDocumentViewerTemplate(sel | Line 607 def manage_addDocumentViewerTemplate(sel |
| self._setObject(id, DocumentViewerTemplate(id)) | self._setObject(id, DocumentViewerTemplate(id)) |
| ob = getattr(self, id) | ob = getattr(self, id) |
| ob.pt_edit(open(os.path.join(package_home(globals()),'zpt/viewer_main.zpt')).read(),None) | txt=file(os.path.join(package_home(globals()),'zpt/viewer_main.zpt'),'r').read() |
| logging.info("txt %s:"%txt) | |
| ob.pt_edit(txt,"text/html") | |
| if title: | if title: |
| ob.pt_setTitle(title) | ob.pt_setTitle(title) |
| try: | try: |