version 1.8, 2006/04/11 17:27:57
|
version 1.9, 2006/04/12 17:47:53
|
Line 24 def getInt(number, default=0):
|
Line 24 def getInt(number, default=0):
|
except: |
except: |
return default |
return default |
|
|
|
|
def getTextFromNode(nodename): |
def getTextFromNode(nodename): |
if nodename is None: |
if nodename is None: |
return "" |
return "" |
Line 35 def getTextFromNode(nodename):
|
Line 34 def getTextFromNode(nodename):
|
rc = rc + node.data |
rc = rc + node.data |
return rc |
return rc |
|
|
|
|
|
def getParentDir(path): |
|
"""returns pathname shortened by one""" |
|
return '/'.join(path.split('/')[0:-1]) |
|
|
|
|
import socket |
import socket |
|
|
def urlopen(url,timeout=2): |
def urlopen(url,timeout=2): |
Line 111 class documentViewer(Folder):
|
Line 116 class documentViewer(Folder):
|
|
|
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""" |
params=cgi.parse_qs(self.REQUEST['QUERY_STRING']) |
params=self.REQUEST.form.copy() |
if param is not None: |
if param is not None: |
if val is None: |
if val is None: |
if params.has_key(param): |
if params.has_key(param): |
del params[param] |
del params[param] |
else: |
else: |
params[param] = [str(val)] |
params[param] = str(val) |
|
|
ps = "&".join(["%s=%s"%(k,urllib.quote(v[0])) for (k, v) in params.items()]) |
# quote values and assemble into query string |
url=self.REQUEST['URL']+"?"+ps |
ps = "&".join(["%s=%s"%(k,urllib.quote(v)) for (k, v) in params.items()]) |
#url=self.REQUEST['URL']+"?"+urllib.urlencode(params, doseq=True) |
url=self.REQUEST['URL1']+"?"+ps |
return url |
return url |
|
|
|
|
Line 133 class documentViewer(Folder):
|
Line 138 class documentViewer(Folder):
|
else: |
else: |
return style |
return style |
|
|
def accessOK(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) |
if access is None: |
if access is None: |
# no information - no access (not yet) |
# no information - no access |
|
#TODO: check |
return True |
return True |
elif access == 'free': |
elif access == 'free': |
return True |
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 |
zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "unknown access type %s"%access) |
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) |
|
return False |
return False |
|
|
|
|
Line 162 class documentViewer(Folder):
|
Line 170 class documentViewer(Folder):
|
|
|
zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo from %s"%(imageUrl)) |
zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo from %s"%(imageUrl)) |
|
|
|
for cnt in (1,2,3): |
try: |
try: |
dom = NonvalidatingReader.parseUri(imageUrl) |
dom = NonvalidatingReader.parseUri(imageUrl) |
|
break |
except: |
except: |
zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.ERROR, "error reading %s"%(imageUrl)) |
zLOG.LOG("documentViewer (getdirinfofromdigilib)", zLOG.ERROR, "error reading %s (try %d)"%(imageUrl,cnt)) |
|
else: |
raise IOError("Unable to get dirinfo from %s"%(imageUrl)) |
raise IOError("Unable to get dirinfo from %s"%(imageUrl)) |
|
|
params=dom.xpath("//dir/size") |
params=dom.xpath("//dir/size") |
Line 179 class documentViewer(Folder):
|
Line 190 class documentViewer(Folder):
|
return docinfo |
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): |
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)) |
zLOG.LOG("documentViewer (getbibinfofromindexmeta)", zLOG.INFO,"path: %s"%(path)) |
|
|
access = None |
access = None |
Line 189 class documentViewer(Folder):
|
Line 225 class documentViewer(Folder):
|
docinfo = {} |
docinfo = {} |
|
|
if dom is None: |
if dom is None: |
server=self.digilibBaseUrl+"/servlet/Texter?fn=" |
dom = self.getIndexMeta(getParentDir(path)) |
path="/".join(path.split("/")[0:-1]) |
|
metaUrl=server+path+"/index.meta" |
|
try: |
|
dom = NonvalidatingReader.parseUri(metaUrl) |
|
except: |
|
return docinfo |
|
|
|
acctype = dom.xpath("//access-conditions/access/@type") |
acctype = dom.xpath("//access-conditions/access/@type") |
if acctype and (len(acctype)>0): |
if acctype and (len(acctype)>0): |
access=acctype[0].value |
access=acctype[0].value |
if access == 'group': |
if access in ['group', 'institution']: |
access = getTextFromNode(dom.xpath("//access-conditions/access/name")[0]).lower() |
access = getTextFromNode(dom.xpath("//access-conditions/access/name")[0]).lower() |
|
|
docinfo['accessType'] = access |
docinfo['accessType'] = access |
Line 208 class documentViewer(Folder):
|
Line 238 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 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)) |
zLOG.LOG("documentViewer (getbibinfofromindexmeta)", zLOG.INFO,"path: %s"%(path)) |
|
|
if docinfo is None: |
if docinfo is None: |
docinfo = {} |
docinfo = {} |
|
|
if dom is None: |
if dom is None: |
server=self.digilibBaseUrl+"/servlet/Texter?fn=" |
dom = self.getIndexMeta(getParentDir(path)) |
path="/".join(path.split("/")[0:-1]) |
|
metaUrl=server+path+"/index.meta" |
|
try: |
|
dom = NonvalidatingReader.parseUri(metaUrl) |
|
except: |
|
return docinfo |
|
|
|
metaData=self.metadata.main.meta.bib |
metaData=self.metadata.main.meta.bib |
bibtype=dom.xpath("//bib/@type") |
bibtype=dom.xpath("//bib/@type") |
Line 231 class documentViewer(Folder):
|
Line 255 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) |
print "bibmap: ", bibmap, " for: ", bibtype |
#print "bibmap: ", bibmap, " for: ", bibtype |
# if there is no mapping bibmap is empty (mapping sometimes has empty fields) |
# if there is no mapping bibmap is empty (mapping sometimes has empty fields) |
if len(bibmap) > 0 and len(bibmap['author'][0]) > 0: |
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]) |
Line 248 class documentViewer(Folder):
|
Line 272 class documentViewer(Folder):
|
docinfo = {} |
docinfo = {} |
|
|
if dom is None: |
if dom is None: |
try: |
dom = self.getIndexMeta(url) |
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)) |
|
|
|
archiveNames=dom.xpath("//resource/name") |
archiveNames=dom.xpath("//resource/name") |
if archiveNames and (len(archiveNames)>0): |
if archiveNames and (len(archiveNames)>0): |
Line 269 class documentViewer(Folder):
|
Line 289 class documentViewer(Folder):
|
else: |
else: |
archivePath=None |
archivePath=None |
|
|
images=dom.xpath("//texttool/image") |
imageDirs=dom.xpath("//texttool/image") |
if images and (len(images)>0): |
if imageDirs and (len(imageDirs)>0): |
image=getTextFromNode(images[0]) |
imageDir=getTextFromNode(imageDirs[0]) |
else: |
else: |
image=None |
imageDir=None |
|
|
if image and archivePath: |
if imageDir and archivePath: |
print "image: ", image, " archivepath: ", archivePath |
#print "image: ", imageDir, " archivepath: ", archivePath |
image=os.path.join(archivePath,image) |
imageDir=os.path.join(archivePath,imageDir) |
image=image.replace("/mpiwg/online",'') |
imageDir=imageDir.replace("/mpiwg/online",'') |
docinfo=self.getDirinfoFromDigilib(image,docinfo=docinfo) |
docinfo=self.getDirinfoFromDigilib(imageDir,docinfo=docinfo) |
docinfo['imagePath'] = image |
docinfo['imagePath'] = imageDir |
docinfo['imageURL'] = self.digilibBaseUrl+"/servlet/Scaler?fn="+image |
docinfo['imageURL'] = self.digilibBaseUrl+"/servlet/Scaler?fn="+imageDir |
|
|
viewerUrls=dom.xpath("//texttool/digiliburlprefix") |
viewerUrls=dom.xpath("//texttool/digiliburlprefix") |
if viewerUrls and (len(viewerUrls)>0): |
if viewerUrls and (len(viewerUrls)>0): |
Line 365 class documentViewer(Folder):
|
Line 385 class documentViewer(Folder):
|
if mode=="texttool": #index.meta with texttool information |
if mode=="texttool": #index.meta with texttool information |
(viewerUrl,imagepath,textpath)=parseUrlTextTool(url) |
(viewerUrl,imagepath,textpath)=parseUrlTextTool(url) |
|
|
print textpath |
#print textpath |
try: |
try: |
dom = NonvalidatingReader.parseUri(textpath) |
dom = NonvalidatingReader.parseUri(textpath) |
except: |
except: |