|
|
| version 1.6, 2006/04/10 11:23:18 | version 1.7, 2006/04/10 19:51:50 |
|---|---|
| Line 14 from Ft.Xml import EMPTY_NAMESPACE | Line 14 from Ft.Xml import EMPTY_NAMESPACE |
| import Ft.Xml.XPath | import Ft.Xml.XPath |
| import os.path | import os.path |
| import sys | |
| import cgi | import cgi |
| import urllib | import urllib |
| import zLOG | import zLOG |
| Line 44 def urlopen(url): | Line 45 def urlopen(url): |
| return ret | return ret |
| ## | ## |
| ## documentViewer class | ## documentViewer class |
| ## | ## |
| Line 97 class documentViewer(Folder): | Line 96 class documentViewer(Folder): |
| 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 |
| print "no template folder -- creating" | |
| self.manage_addFolder('template') | self.manage_addFolder('template') |
| if not self.digilibBaseUrl: | if not self.digilibBaseUrl: |
| Line 113 class documentViewer(Folder): | Line 111 class documentViewer(Folder): |
| """link to documentviewer with parameter param set to val""" | """link to documentviewer with parameter param set to val""" |
| params=cgi.parse_qs(self.REQUEST['QUERY_STRING']) | params=cgi.parse_qs(self.REQUEST['QUERY_STRING']) |
| if param is not None: | if param is not None: |
| if val is None and params.has_key(param): | if val is None: |
| if params.has_key(param): | |
| del params[param] | del params[param] |
| else: | else: |
| params[param] = val | params[param] = [str(val)] |
| url=self.REQUEST['URL']+"?"+urllib.urlencode(params, doseq=True) | ps = "&".join(["%s=%s"%(k,urllib.quote(v[0])) for (k, v) in params.items()]) |
| url=self.REQUEST['URL']+"?"+ps | |
| #url=self.REQUEST['URL']+"?"+urllib.urlencode(params, doseq=True) | |
| return url | return url |
| Line 131 class documentViewer(Folder): | Line 132 class documentViewer(Folder): |
| return style | return style |
| def getParamFromDigilib(self,path,param): | def getDirinfoFromDigilib(self,path,docinfo=None): |
| """gibt param von dlInfo aus""" | """gibt param von dlInfo aus""" |
| if docinfo is None: | |
| docinfo = {} | |
| imageUrl=self.digilibBaseUrl+"/dirInfo-xml.jsp?mo=dir&fn="+path | imageUrl=self.digilibBaseUrl+"/dirInfo-xml.jsp?mo=dir&fn="+path |
| zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo (%s) from %s"%(param,imageUrl)) | zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo from %s"%(imageUrl)) |
| try: | try: |
| dom = NonvalidatingReader.parseUri(imageUrl) | dom = NonvalidatingReader.parseUri(imageUrl) |
| except: | except: |
| return None | zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.ERROR, "error reading %s"%(imageUrl)) |
| raise IOError("Unable to get dirinfo from %s"%(imageUrl)) | |
| params=dom.xpath("//dir/%s"%param) | params=dom.xpath("//dir/size") |
| zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo:%s"%params) | zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo:size"%params) |
| if params: | if params: |
| return getTextFromNode(params[0]) | docinfo['numPages'] = getTextFromNode(params[0]) |
| else: | |
| docinfo['numPages'] = 0 | |
| return docinfo | |
| def getBibinfoFromIndexMeta(self,path,docinfo=None,dom=None): | def getBibinfoFromIndexMeta(self,path,docinfo=None,dom=None): |
| Line 157 class documentViewer(Folder): | Line 166 class documentViewer(Folder): |
| docinfo = {} | docinfo = {} |
| if dom is None: | if dom is None: |
| server="http://nausikaa.mpiwg-berlin.mpg.de/digitallibrary/servlet/Texter?fn=" | server=self.digilibBaseUrl+"/servlet/Texter?fn=" |
| path="/".join(path.split("/")[0:-1]) | path="/".join(path.split("/")[0:-1]) |
| metaUrl=server+path+"/index.meta" | metaUrl=server+path+"/index.meta" |
| try: | try: |
| Line 173 class documentViewer(Folder): | Line 182 class documentViewer(Folder): |
| bibtype="generic" | bibtype="generic" |
| bibtype=bibtype.replace("-"," ") # wrong typesiin index meta "-" instead of " " (not wrong! ROC) | bibtype=bibtype.replace("-"," ") # wrong typesiin index meta "-" instead of " " (not wrong! ROC) |
| bibmap=metaData.generateMappingForType(bibtype) | bibmap=metaData.generateMappingForType(bibtype) |
| if len(bibmap) > 0: | print "bibmap: ", bibmap, " for: ", bibtype |
| if len(bibmap) > 0 and len(bibmap['author'][0]) > 0: | |
| docinfo['author']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['author'][0])[0]) | docinfo['author']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['author'][0])[0]) |
| 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]) |
| Line 191 class documentViewer(Folder): | Line 201 class documentViewer(Folder): |
| dom = NonvalidatingReader.parseUri(url) | dom = NonvalidatingReader.parseUri(url) |
| except: | except: |
| zLOG.LOG("documentViewer (parseUrlTexttool)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) | zLOG.LOG("documentViewer (parseUrlTexttool)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) |
| return docinfo | raise IOError("Unable to get texttool info from %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): |
| archivePath=getTextFromNode(archivePaths[0]) | archivePath=getTextFromNode(archivePaths[0]) |
| else: | else: |
| archivePath=None | archivePath=None |
| images=dom.xpath("//texttool/image") | images=dom.xpath("//texttool/image") |
| if images and (len(images)>0): | if images and (len(images)>0): |
| image=getTextFromNode(images[0]) | image=getTextFromNode(images[0]) |
| else: | else: |
| Line 210 class documentViewer(Folder): | Line 218 class documentViewer(Folder): |
| if image and archivePath: | if image and archivePath: |
| image=os.path.join(archivePath,image) | image=os.path.join(archivePath,image) |
| image=image.replace("/mpiwg/online",'') | image=image.replace("/mpiwg/online",'') |
| pt=self.getParamFromDigilib(image,'size') | docinfo=self.getDirinfoFromDigilib(image,docinfo=docinfo) |
| docinfo['imagePath'] = image | docinfo['imagePath'] = image |
| docinfo['numPages'] = pt | docinfo['imageURL'] = self.digilibBaseUrl+"/servlet/Scaler?fn="+image |
| viewerUrls=dom.xpath("//texttool/digiliburlprefix") | viewerUrls=dom.xpath("//texttool/digiliburlprefix") |
| if viewerUrls and (len(viewerUrls)>0): | if viewerUrls and (len(viewerUrls)>0): |
| viewerUrl=getTextFromNode(viewerUrls[0]) | viewerUrl=getTextFromNode(viewerUrls[0]) |
| docinfo['imageURL'] = viewerURL | docinfo['viewerURL'] = viewerUrl |
| textUrls=dom.xpath("//texttool/text") | textUrls=dom.xpath("//texttool/text") |
| if textUrls and (len(textUrls)>0): | if textUrls and (len(textUrls)>0): |
| textUrl=getTextFromNode(textUrls[0]) | textUrl=getTextFromNode(textUrls[0]) |
| docinfo['textURL'] = textURL | docinfo['textURL'] = textUrl |
| docinfo = self.getBibinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) | docinfo = self.getBibinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) |
| return docinfo | return docinfo |
| Line 237 class documentViewer(Folder): | Line 243 class documentViewer(Folder): |
| docinfo = {} | docinfo = {} |
| path=path.replace("/mpiwg/online","") | path=path.replace("/mpiwg/online","") |
| docinfo['imagePath'] = path | docinfo['imagePath'] = path |
| pt=self.getParamFromDigilib(path,'size') | docinfo=self.getDirinfoFromDigilib(path,docinfo=docinfo) |
| docinfo['numPages'] = pt | imageUrl=self.digilibBaseUrl+"/servlet/Scaler?fn="+path |
| imageUrl=self.digilibBaseUrl+"/servlet/Scaler?fn=%s"%path | |
| docinfo['imageURL'] = imageUrl | docinfo['imageURL'] = imageUrl |
| docinfo = self.getBibinfoFromIndexMeta(path,docinfo=docinfo) | docinfo = self.getBibinfoFromIndexMeta(path,docinfo=docinfo) |
| Line 281 class documentViewer(Folder): | Line 286 class documentViewer(Folder): |
| grpsize = cols * rows | grpsize = cols * rows |
| pageinfo['groupsize'] = grpsize | pageinfo['groupsize'] = grpsize |
| start = getInt(start, default=(int(current / grpsize) * grpsize +1)) | start = getInt(start, default=(int(current / grpsize) * grpsize +1)) |
| print "start3:", start | |
| pageinfo['start'] = start | pageinfo['start'] = start |
| pageinfo['end'] = start + grpsize | pageinfo['end'] = start + grpsize |
| if docinfo is not None: | if docinfo is not None: |