--- documentViewer/documentViewer.py 2006/04/11 17:27:57 1.8 +++ documentViewer/documentViewer.py 2006/04/12 17:47:53 1.9 @@ -23,7 +23,6 @@ def getInt(number, default=0): return int(number) except: return default - def getTextFromNode(nodename): if nodename is None: @@ -35,6 +34,12 @@ def getTextFromNode(nodename): rc = rc + node.data return rc + +def getParentDir(path): + """returns pathname shortened by one""" + return '/'.join(path.split('/')[0:-1]) + + import socket def urlopen(url,timeout=2): @@ -111,17 +116,17 @@ class documentViewer(Folder): def getLink(self,param=None,val=None): """link to documentviewer with parameter param set to val""" - params=cgi.parse_qs(self.REQUEST['QUERY_STRING']) + params=self.REQUEST.form.copy() if param is not None: if val is None: if params.has_key(param): del params[param] else: - params[param] = [str(val)] + params[param] = str(val) - 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) + # quote values and assemble into query string + ps = "&".join(["%s=%s"%(k,urllib.quote(v)) for (k, v) in params.items()]) + url=self.REQUEST['URL1']+"?"+ps return url @@ -131,28 +136,31 @@ class documentViewer(Folder): if idx == selected: return style + 'sel' else: - return style + return style + - def accessOK(self, docinfo): + def isAccessible(self, docinfo): """returns if access to the resource is granted""" access = docinfo.get('accessType', None) if access is None: - # no information - no access (not yet) + # no information - no access + #TODO: check return True elif access == 'free': return True + elif access in self.authgroups: + # only local access -- only logged in users + user = getSecurityManager().getUser() + if user is not None: + #print "user: ", user + return (user.getUserName() != "Anonymous User") + else: + return False - print "access: ", access, " authgroups: ", self.authgroups - if access in self.authgroups: - # local access OK - user = getSecurityManager().getUser().getUserName() - print "user: ", user - return (user != "Anonymous User") - - zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "unknown access group %s"%access) + zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "unknown access type %s"%access) return False + - def getDirinfoFromDigilib(self,path,docinfo=None): """gibt param von dlInfo aus""" if docinfo is None: @@ -162,10 +170,13 @@ class documentViewer(Folder): zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo from %s"%(imageUrl)) - try: - dom = NonvalidatingReader.parseUri(imageUrl) - except: - zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.ERROR, "error reading %s"%(imageUrl)) + for cnt in (1,2,3): + try: + dom = NonvalidatingReader.parseUri(imageUrl) + break + except: + zLOG.LOG("documentViewer (getdirinfofromdigilib)", zLOG.ERROR, "error reading %s (try %d)"%(imageUrl,cnt)) + else: raise IOError("Unable to get dirinfo from %s"%(imageUrl)) params=dom.xpath("//dir/size") @@ -179,8 +190,33 @@ class documentViewer(Folder): return docinfo + def getIndexMeta(self, url): + """returns dom of index.meta document at url""" + dom = None + if url.startswith("http://"): + # real URL + try: + dom = NonvalidatingReader.parseUri(url) + except: + zLOG.LOG("documentViewer (getIndexMata)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) + raise IOError("Unable to get info from %s"%(url)) + else: + # online path + server=self.digilibBaseUrl+"/servlet/Texter?fn=" + metaUrl=server+url + if not metaUrl.endswith("index.meta"): + metaUrl += "/index.meta" + try: + dom = NonvalidatingReader.parseUri(metaUrl) + except: + zLOG.LOG("documentViewer (getIndexMata)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) + raise IOError("Unable to get info from %s"%(url)) + + return dom + + def getAuthinfoFromIndexMeta(self,path,docinfo=None,dom=None): - """gets authorization info from the index.meta file at url or given by dom""" + """gets authorization info from the index.meta file at path or given by dom""" zLOG.LOG("documentViewer (getbibinfofromindexmeta)", zLOG.INFO,"path: %s"%(path)) access = None @@ -189,18 +225,12 @@ class documentViewer(Folder): docinfo = {} if dom is None: - server=self.digilibBaseUrl+"/servlet/Texter?fn=" - path="/".join(path.split("/")[0:-1]) - metaUrl=server+path+"/index.meta" - try: - dom = NonvalidatingReader.parseUri(metaUrl) - except: - return docinfo + dom = self.getIndexMeta(getParentDir(path)) acctype = dom.xpath("//access-conditions/access/@type") if acctype and (len(acctype)>0): access=acctype[0].value - if access == 'group': + if access in ['group', 'institution']: access = getTextFromNode(dom.xpath("//access-conditions/access/name")[0]).lower() docinfo['accessType'] = access @@ -208,21 +238,15 @@ class documentViewer(Folder): def getBibinfoFromIndexMeta(self,path,docinfo=None,dom=None): - """gets bibliographical info from the index.meta file at url 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)) if docinfo is None: docinfo = {} if dom is None: - server=self.digilibBaseUrl+"/servlet/Texter?fn=" - path="/".join(path.split("/")[0:-1]) - metaUrl=server+path+"/index.meta" - try: - dom = NonvalidatingReader.parseUri(metaUrl) - except: - return docinfo - + dom = self.getIndexMeta(getParentDir(path)) + metaData=self.metadata.main.meta.bib bibtype=dom.xpath("//bib/@type") if bibtype and (len(bibtype)>0): @@ -231,7 +255,7 @@ class documentViewer(Folder): bibtype="generic" bibtype=bibtype.replace("-"," ") # wrong typesiin index meta "-" instead of " " (not wrong! ROC) bibmap=metaData.generateMappingForType(bibtype) - print "bibmap: ", bibmap, " for: ", bibtype + #print "bibmap: ", bibmap, " for: ", bibtype # if there is no mapping bibmap is empty (mapping sometimes has empty fields) if len(bibmap) > 0 and len(bibmap['author'][0]) > 0: docinfo['author']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['author'][0])[0]) @@ -248,11 +272,7 @@ class documentViewer(Folder): docinfo = {} if dom is None: - try: - dom = NonvalidatingReader.parseUri(url) - except: - zLOG.LOG("documentViewer (parseUrlTexttool)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) - raise IOError("Unable to get texttool info from %s"%(url)) + dom = self.getIndexMeta(url) archiveNames=dom.xpath("//resource/name") if archiveNames and (len(archiveNames)>0): @@ -269,19 +289,19 @@ class documentViewer(Folder): else: archivePath=None - images=dom.xpath("//texttool/image") - if images and (len(images)>0): - image=getTextFromNode(images[0]) + imageDirs=dom.xpath("//texttool/image") + if imageDirs and (len(imageDirs)>0): + imageDir=getTextFromNode(imageDirs[0]) else: - image=None + imageDir=None - if image and archivePath: - print "image: ", image, " archivepath: ", archivePath - image=os.path.join(archivePath,image) - image=image.replace("/mpiwg/online",'') - docinfo=self.getDirinfoFromDigilib(image,docinfo=docinfo) - docinfo['imagePath'] = image - docinfo['imageURL'] = self.digilibBaseUrl+"/servlet/Scaler?fn="+image + if imageDir and archivePath: + #print "image: ", imageDir, " archivepath: ", archivePath + imageDir=os.path.join(archivePath,imageDir) + 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") if viewerUrls and (len(viewerUrls)>0): @@ -365,7 +385,7 @@ class documentViewer(Folder): if mode=="texttool": #index.meta with texttool information (viewerUrl,imagepath,textpath)=parseUrlTextTool(url) - print textpath + #print textpath try: dom = NonvalidatingReader.parseUri(textpath) except: