annotate documentViewer.py @ 494:ecdb238aa595 roc_1

added retry when reading index meta from texter applet
author casties
date Tue, 13 Jun 2006 16:57:46 +0200
parents 96f74b2bab24
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dwinter
parents:
diff changeset
1 from OFS.Folder import Folder
dwinter
parents:
diff changeset
2 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
dwinter
parents:
diff changeset
3 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
dwinter
parents:
diff changeset
4 from AccessControl import ClassSecurityInfo
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
5 from AccessControl import getSecurityManager
0
dwinter
parents:
diff changeset
6 from Globals import package_home
dwinter
parents:
diff changeset
7
dwinter
parents:
diff changeset
8 from Ft.Xml.Domlette import NonvalidatingReader
dwinter
parents:
diff changeset
9 from Ft.Xml.Domlette import PrettyPrint, Print
dwinter
parents:
diff changeset
10 from Ft.Xml import EMPTY_NAMESPACE
dwinter
parents:
diff changeset
11
dwinter
parents:
diff changeset
12 import Ft.Xml.XPath
dwinter
parents:
diff changeset
13
dwinter
parents:
diff changeset
14 import os.path
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
15 import sys
0
dwinter
parents:
diff changeset
16 import cgi
dwinter
parents:
diff changeset
17 import urllib
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
18 import zLOG
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
19
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
20 def getInt(number, default=0):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
21 """returns always an int (0 in case of problems)"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
22 try:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
23 return int(number)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
24 except:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
25 return default
0
dwinter
parents:
diff changeset
26
dwinter
parents:
diff changeset
27 def getTextFromNode(nodename):
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
28 if nodename is None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
29 return ""
0
dwinter
parents:
diff changeset
30 nodelist=nodename.childNodes
dwinter
parents:
diff changeset
31 rc = ""
dwinter
parents:
diff changeset
32 for node in nodelist:
dwinter
parents:
diff changeset
33 if node.nodeType == node.TEXT_NODE:
dwinter
parents:
diff changeset
34 rc = rc + node.data
dwinter
parents:
diff changeset
35 return rc
dwinter
parents:
diff changeset
36
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
37
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
38 def getParentDir(path):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
39 """returns pathname shortened by one"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
40 return '/'.join(path.split('/')[0:-1])
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
41
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
42
0
dwinter
parents:
diff changeset
43 import socket
dwinter
parents:
diff changeset
44
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
45 def urlopen(url,timeout=2):
0
dwinter
parents:
diff changeset
46 """urlopen mit timeout"""
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
47 socket.setdefaulttimeout(timeout)
0
dwinter
parents:
diff changeset
48 ret=urllib.urlopen(url)
dwinter
parents:
diff changeset
49 socket.setdefaulttimeout(5)
dwinter
parents:
diff changeset
50 return ret
dwinter
parents:
diff changeset
51
dwinter
parents:
diff changeset
52
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
53 ##
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
54 ## documentViewer class
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
55 ##
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
56 class documentViewer(Folder):
0
dwinter
parents:
diff changeset
57 """document viewer"""
dwinter
parents:
diff changeset
58
dwinter
parents:
diff changeset
59 meta_type="Document viewer"
dwinter
parents:
diff changeset
60
dwinter
parents:
diff changeset
61 security=ClassSecurityInfo()
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
62 manage_options=Folder.manage_options+(
0
dwinter
parents:
diff changeset
63 {'label':'main config','action':'changeDocumentViewerForm'},
dwinter
parents:
diff changeset
64 )
dwinter
parents:
diff changeset
65
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
66 # templates and forms
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
67 viewer_main = PageTemplateFile('zpt/viewer_main', globals())
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
68 thumbs_main = PageTemplateFile('zpt/thumbs_main', globals())
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
69 image_main = PageTemplateFile('zpt/image_main', globals())
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
70 head_main = PageTemplateFile('zpt/head_main', globals())
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
71 docuviewer_css = PageTemplateFile('css/docuviewer.css', globals())
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
72
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
73 security.declareProtected('View management screens','changeDocumentViewerForm')
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
74 changeDocumentViewerForm = PageTemplateFile('zpt/changeDocumentViewer', globals())
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
75
0
dwinter
parents:
diff changeset
76
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
77 def __init__(self,id,imageViewerUrl,title="",digilibBaseUrl=None,thumbcols=2,thumbrows=10,authgroups="mpiwg"):
0
dwinter
parents:
diff changeset
78 """init document viewer"""
dwinter
parents:
diff changeset
79 self.id=id
dwinter
parents:
diff changeset
80 self.title=title
dwinter
parents:
diff changeset
81 self.imageViewerUrl=imageViewerUrl
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
82 if not digilibBaseUrl:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
83 self.digilibBaseUrl = self.findDigilibUrl()
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
84 else:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
85 self.digilibBaseUrl = digilibBaseUrl
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
86 self.thumbcols = thumbcols
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
87 self.thumbrows = thumbrows
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
88 # authgroups is list of authorized groups (delimited by ,)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
89 self.authgroups = [s.strip().lower() for s in authgroups.split(',')]
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
90 # add template folder so we can always use template.something
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
91 self.manage_addFolder('template')
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
92
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
93
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
94 security.declareProtected('View','index_html')
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
95 def index_html(self,mode,url,start=None,pn=1):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
96 '''
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
97 view it
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
98 @param mode: defines which type of document is behind url
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
99 @param url: url which contains display information
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
100 '''
0
dwinter
parents:
diff changeset
101
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
102 zLOG.LOG("documentViewer (index)", zLOG.INFO, "mode: %s url:%s start:%s pn:%s"%(mode,url,start,pn))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
103
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
104 if not hasattr(self, 'template'):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
105 # create template folder if it doesn't exist
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
106 self.manage_addFolder('template')
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
107
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
108 if not self.digilibBaseUrl:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
109 self.digilibBaseUrl = self.findDigilibUrl() or "http://nausikaa.mpiwg-berlin.mpg.de/digitallibrary"
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
110
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
111 docinfo = self.getDocinfo(mode=mode,url=url)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
112 pageinfo = self.getPageinfo(start=start,current=pn,docinfo=docinfo)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
113 pt = getattr(self.template, 'viewer_main')
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
114 return pt(docinfo=docinfo,pageinfo=pageinfo)
0
dwinter
parents:
diff changeset
115
dwinter
parents:
diff changeset
116
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
117 def getLink(self,param=None,val=None):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
118 """link to documentviewer with parameter param set to val"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
119 params=self.REQUEST.form.copy()
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
120 if param is not None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
121 if val is None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
122 if params.has_key(param):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
123 del params[param]
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
124 else:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
125 params[param] = str(val)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
126
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
127 # quote values and assemble into query string
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
128 ps = "&".join(["%s=%s"%(k,urllib.quote(v)) for (k, v) in params.items()])
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
129 url=self.REQUEST['URL1']+"?"+ps
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
130 return url
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
131
0
dwinter
parents:
diff changeset
132
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
133 def getStyle(self, idx, selected, style=""):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
134 """returns a string with the given style and append 'sel' if path == selected."""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
135 #zLOG.LOG("documentViewer (getstyle)", zLOG.INFO, "idx: %s selected: %s style: %s"%(idx,selected,style))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
136 if idx == selected:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
137 return style + 'sel'
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
138 else:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
139 return style
0
dwinter
parents:
diff changeset
140
dwinter
parents:
diff changeset
141
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
142 def isAccessible(self, docinfo):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
143 """returns if access to the resource is granted"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
144 access = docinfo.get('accessType', None)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
145 if access is None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
146 # no information - no access
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
147 #TODO: check
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
148 return True
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
149 elif access == 'free':
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
150 return True
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
151 elif access in self.authgroups:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
152 # only local access -- only logged in users
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
153 user = getSecurityManager().getUser()
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
154 if user is not None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
155 #print "user: ", user
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
156 return (user.getUserName() != "Anonymous User")
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
157 else:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
158 return False
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
159
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
160 zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "unknown access type %s"%access)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
161 return False
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
162
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
163
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
164 def getDirinfoFromDigilib(self,path,docinfo=None):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
165 """gibt param von dlInfo aus"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
166 if docinfo is None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
167 docinfo = {}
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
168
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
169 imageUrl=self.digilibBaseUrl+"/dirInfo-xml.jsp?mo=dir&fn="+path
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
170
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
171 zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo from %s"%(imageUrl))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
172
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
173 for cnt in (1,2,3):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
174 try:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
175 dom = NonvalidatingReader.parseUri(imageUrl)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
176 break
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
177 except:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
178 zLOG.LOG("documentViewer (getdirinfofromdigilib)", zLOG.ERROR, "error reading %s (try %d)"%(imageUrl,cnt))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
179 else:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
180 raise IOError("Unable to get dir-info from %s"%(imageUrl))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
181
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
182 sizes=dom.xpath("//dir/size")
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
183 zLOG.LOG("documentViewer (getparamfromdigilib)", zLOG.INFO, "dirInfo:size"%sizes)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
184
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
185 if sizes:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
186 docinfo['numPages'] = int(getTextFromNode(sizes[0]))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
187 else:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
188 docinfo['numPages'] = 0
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
189
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
190 return docinfo
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
191
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
192
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
193 def getIndexMeta(self, url):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
194 """returns dom of index.meta document at url"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
195 num_retries = 3
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
196 dom = None
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
197 metaUrl = None
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
198 if url.startswith("http://"):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
199 # real URL
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
200 metaUrl = url
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
201 try:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
202 dom = NonvalidatingReader.parseUri(url)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
203 except:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
204 zLOG.LOG("documentViewer (getIndexMata)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
205 raise IOError("Unable to read index.meta from %s"%(url))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
206 else:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
207 # online path
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
208 server=self.digilibBaseUrl+"/servlet/Texter?fn="
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
209 metaUrl=server+url
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
210 if not metaUrl.endswith("index.meta"):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
211 metaUrl += "/index.meta"
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
212
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
213 for n in range(num_retries):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
214 try:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
215 dom = NonvalidatingReader.parseUri(metaUrl)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
216 zLOG.LOG("documentViewer (getIndexMata)", zLOG.INFO,metaUrl)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
217 break
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
218 except:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
219 zLOG.LOG("ERROR documentViewer (getIndexMata)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
220
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
221 if dom is None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
222 raise IOError("Unable to read index meta from %s"%(url))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
223
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
224 return dom
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
225
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
226
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
227 def getAuthinfoFromIndexMeta(self,path,docinfo=None,dom=None):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
228 """gets authorization info from the index.meta file at path or given by dom"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
229 zLOG.LOG("documentViewer (getauthinfofromindexmeta)", zLOG.INFO,"path: %s"%(path))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
230
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
231 access = None
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
232
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
233 if docinfo is None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
234 docinfo = {}
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
235
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
236 if dom is None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
237 dom = self.getIndexMeta(getParentDir(path))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
238
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
239 acctype = dom.xpath("//access-conditions/access/@type")
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
240 if acctype and (len(acctype)>0):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
241 access=acctype[0].value
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
242 if access in ['group', 'institution']:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
243 access = getTextFromNode(dom.xpath("//access-conditions/access/name")[0]).lower()
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
244
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
245 docinfo['accessType'] = access
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
246 return docinfo
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
247
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
248
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
249 def getBibinfoFromIndexMeta(self,path,docinfo=None,dom=None):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
250 """gets bibliographical info from the index.meta file at path or given by dom"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
251 zLOG.LOG("documentViewer (getbibinfofromindexmeta)", zLOG.INFO,"path: %s"%(path))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
252
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
253 if docinfo is None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
254 docinfo = {}
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
255
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
256 if dom is None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
257 dom = self.getIndexMeta(getParentDir(path))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
258
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
259 metaData=self.metadata.main.meta.bib
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
260 bibtype=dom.xpath("//bib/@type")
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
261 if bibtype and (len(bibtype)>0):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
262 bibtype=bibtype[0].value
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
263 else:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
264 bibtype="generic"
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
265 bibtype=bibtype.replace("-"," ") # wrong typesiin index meta "-" instead of " " (not wrong! ROC)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
266 bibmap=metaData.generateMappingForType(bibtype)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
267 #print "bibmap: ", bibmap, " for: ", bibtype
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
268 # if there is no mapping bibmap is empty (mapping sometimes has empty fields)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
269 if len(bibmap) > 0 and len(bibmap['author'][0]) > 0:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
270 docinfo['author']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['author'][0])[0])
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
271 docinfo['title']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['title'][0])[0])
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
272 docinfo['year']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['year'][0])[0])
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
273
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
274 return docinfo
0
dwinter
parents:
diff changeset
275
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
276
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
277 def getDocinfoFromTextTool(self,url,dom=None,docinfo=None):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
278 """parse texttool tag in index meta"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
279 zLOG.LOG("documentViewer (getdocinfofromtexttool)", zLOG.INFO,"url: %s"%(url))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
280 if docinfo is None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
281 docinfo = {}
0
dwinter
parents:
diff changeset
282
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
283 if dom is None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
284 dom = self.getIndexMeta(url)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
285
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
286 archiveNames=dom.xpath("//resource/name")
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
287 if archiveNames and (len(archiveNames)>0):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
288 archiveName=getTextFromNode(archiveNames[0])
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
289
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
290 archivePaths=dom.xpath("//resource/archive-path")
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
291 if archivePaths and (len(archivePaths)>0):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
292 archivePath=getTextFromNode(archivePaths[0])
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
293 # clean up archive path
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
294 if archivePath[0] != '/':
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
295 archivePath = '/' + archivePath
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
296 if not archivePath.endswith(archiveName):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
297 archivePath += "/" + archiveName
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
298 else:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
299 archivePath=None
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
300
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
301 imageDirs=dom.xpath("//texttool/image")
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
302 if imageDirs and (len(imageDirs)>0):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
303 imageDir=getTextFromNode(imageDirs[0])
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
304 else:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
305 # we balk with no image tag
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
306 raise IOError("No text-tool info in %s"%(url))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
307
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
308 if imageDir and archivePath:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
309 #print "image: ", imageDir, " archivepath: ", archivePath
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
310 imageDir=os.path.join(archivePath,imageDir)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
311 imageDir=imageDir.replace("/mpiwg/online",'')
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
312 docinfo=self.getDirinfoFromDigilib(imageDir,docinfo=docinfo)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
313 docinfo['imagePath'] = imageDir
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
314 docinfo['imageURL'] = self.digilibBaseUrl+"/servlet/Scaler?fn="+imageDir
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
315
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
316 viewerUrls=dom.xpath("//texttool/digiliburlprefix")
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
317 if viewerUrls and (len(viewerUrls)>0):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
318 viewerUrl=getTextFromNode(viewerUrls[0])
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
319 docinfo['viewerURL'] = viewerUrl
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
320
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
321 textUrls=dom.xpath("//texttool/text")
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
322 if textUrls and (len(textUrls)>0):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
323 textUrl=getTextFromNode(textUrls[0])
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
324 docinfo['textURL'] = textUrl
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
325
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
326 docinfo = self.getBibinfoFromIndexMeta(url,docinfo=docinfo,dom=dom)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
327 docinfo = self.getAuthinfoFromIndexMeta(url,docinfo=docinfo,dom=dom)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
328 return docinfo
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
329
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
330
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
331 def getDocinfoFromImagePath(self,path,docinfo=None):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
332 """path ist the path to the images it assumes that the index.meta file is one level higher."""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
333 zLOG.LOG("documentViewer (getdocinfofromimagepath)", zLOG.INFO,"path: %s"%(path))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
334 if docinfo is None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
335 docinfo = {}
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
336 path=path.replace("/mpiwg/online","")
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
337 docinfo['imagePath'] = path
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
338 docinfo=self.getDirinfoFromDigilib(path,docinfo=docinfo)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
339 imageUrl=self.digilibBaseUrl+"/servlet/Scaler?fn="+path
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
340 docinfo['imageURL'] = imageUrl
0
dwinter
parents:
diff changeset
341
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
342 docinfo = self.getBibinfoFromIndexMeta(path,docinfo=docinfo)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
343 docinfo = self.getAuthinfoFromIndexMeta(path,docinfo=docinfo)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
344 return docinfo
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
345
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
346
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
347 def getDocinfo(self, mode, url):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
348 """returns docinfo depending on mode"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
349 zLOG.LOG("documentViewer (getdocinfo)", zLOG.INFO,"mode: %s, url: %s"%(mode,url))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
350 # look for cached docinfo in session
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
351 if self.REQUEST.SESSION.has_key('docinfo'):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
352 docinfo = self.REQUEST.SESSION['docinfo']
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
353 # check if its still current
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
354 if docinfo is not None and docinfo.get('mode') == mode and docinfo.get('url') == url:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
355 zLOG.LOG("documentViewer (getdocinfo)", zLOG.INFO,"docinfo in session: %s"%docinfo)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
356 return docinfo
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
357 # new docinfo
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
358 docinfo = {'mode': mode, 'url': url}
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
359 if mode=="texttool": #index.meta with texttool information
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
360 docinfo = self.getDocinfoFromTextTool(url, docinfo=docinfo)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
361 elif mode=="imagepath":
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
362 docinfo = self.getDocinfoFromImagePath(url, docinfo=docinfo)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
363 else:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
364 zLOG.LOG("documentViewer (getdocinfo)", zLOG.ERROR,"unknown mode!")
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
365 raise ValueError("Unknown mode %s"%(mode))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
366
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
367 zLOG.LOG("documentViewer (getdocinfo)", zLOG.INFO,"docinfo: %s"%docinfo)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
368 self.REQUEST.SESSION['docinfo'] = docinfo
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
369 return docinfo
0
dwinter
parents:
diff changeset
370
dwinter
parents:
diff changeset
371
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
372 def getPageinfo(self, current, start=None, rows=None, cols=None, docinfo=None):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
373 """returns pageinfo with the given parameters"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
374 pageinfo = {}
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
375 current = getInt(current)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
376 pageinfo['current'] = current
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
377 rows = int(rows or self.thumbrows)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
378 pageinfo['rows'] = rows
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
379 cols = int(cols or self.thumbcols)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
380 pageinfo['cols'] = cols
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
381 grpsize = cols * rows
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
382 pageinfo['groupsize'] = grpsize
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
383 start = getInt(start, default=(int(current / grpsize) * grpsize +1))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
384 pageinfo['start'] = start
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
385 pageinfo['end'] = start + grpsize
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
386 if docinfo is not None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
387 np = int(docinfo['numPages'])
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
388 pageinfo['end'] = min(pageinfo['end'], np)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
389 pageinfo['numgroups'] = int(np / grpsize)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
390 if np % grpsize > 0:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
391 pageinfo['numgroups'] += 1
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
392
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
393 return pageinfo
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
394
0
dwinter
parents:
diff changeset
395 def text(self,mode,url,pn):
dwinter
parents:
diff changeset
396 """give text"""
dwinter
parents:
diff changeset
397 if mode=="texttool": #index.meta with texttool information
dwinter
parents:
diff changeset
398 (viewerUrl,imagepath,textpath)=parseUrlTextTool(url)
dwinter
parents:
diff changeset
399
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
400 #print textpath
0
dwinter
parents:
diff changeset
401 try:
dwinter
parents:
diff changeset
402 dom = NonvalidatingReader.parseUri(textpath)
dwinter
parents:
diff changeset
403 except:
dwinter
parents:
diff changeset
404 return None
dwinter
parents:
diff changeset
405
dwinter
parents:
diff changeset
406 list=[]
dwinter
parents:
diff changeset
407 nodes=dom.xpath("//pb")
dwinter
parents:
diff changeset
408
dwinter
parents:
diff changeset
409 node=nodes[int(pn)-1]
dwinter
parents:
diff changeset
410
dwinter
parents:
diff changeset
411 p=node
dwinter
parents:
diff changeset
412
dwinter
parents:
diff changeset
413 while p.tagName!="p":
dwinter
parents:
diff changeset
414 p=p.parentNode
dwinter
parents:
diff changeset
415
dwinter
parents:
diff changeset
416
dwinter
parents:
diff changeset
417 endNode=nodes[int(pn)]
dwinter
parents:
diff changeset
418
dwinter
parents:
diff changeset
419
dwinter
parents:
diff changeset
420 e=endNode
dwinter
parents:
diff changeset
421
dwinter
parents:
diff changeset
422 while e.tagName!="p":
dwinter
parents:
diff changeset
423 e=e.parentNode
dwinter
parents:
diff changeset
424
dwinter
parents:
diff changeset
425
dwinter
parents:
diff changeset
426 next=node.parentNode
dwinter
parents:
diff changeset
427
dwinter
parents:
diff changeset
428 #sammle s
dwinter
parents:
diff changeset
429 while next and (next!=endNode.parentNode):
dwinter
parents:
diff changeset
430 list.append(next)
dwinter
parents:
diff changeset
431 next=next.nextSibling
dwinter
parents:
diff changeset
432 list.append(endNode.parentNode)
dwinter
parents:
diff changeset
433
dwinter
parents:
diff changeset
434 if p==e:# beide im selben paragraphen
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
435 pass
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
436 # else:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
437 # next=p
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
438 # while next!=e:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
439 # print next,e
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
440 # list.append(next)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
441 # next=next.nextSibling
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
442 #
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
443 # for x in list:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
444 # PrettyPrint(x)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
445 #
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
446 # return list
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
447 #
0
dwinter
parents:
diff changeset
448
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
449 def findDigilibUrl(self):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
450 """try to get the digilib URL from zogilib"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
451 url = self.imageViewerUrl[:-1] + "/getScalerUrl"
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
452 try:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
453 scaler = urlopen(url).read()
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
454 return scaler.replace("/servlet/Scaler?", "")
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
455 except:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
456 return None
0
dwinter
parents:
diff changeset
457
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
458 def changeDocumentViewer(self,imageViewerUrl,title="",digilibBaseUrl=None,thumbrows=2,thumbcols=10,authgroups='mpiwg',RESPONSE=None):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
459 """init document viewer"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
460 self.title=title
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
461 self.imageViewerUrl=imageViewerUrl
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
462 self.digilibBaseUrl = digilibBaseUrl
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
463 self.thumbrows = thumbrows
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
464 self.thumbcols = thumbcols
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
465 self.authgroups = [s.strip().lower() for s in authgroups.split(',')]
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
466 if RESPONSE is not None:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
467 RESPONSE.redirect('manage_main')
0
dwinter
parents:
diff changeset
468
dwinter
parents:
diff changeset
469
dwinter
parents:
diff changeset
470
dwinter
parents:
diff changeset
471
dwinter
parents:
diff changeset
472 # security.declareProtected('View management screens','renameImageForm')
dwinter
parents:
diff changeset
473
dwinter
parents:
diff changeset
474 def manage_AddDocumentViewerForm(self):
dwinter
parents:
diff changeset
475 """add the viewer form"""
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
476 pt=PageTemplateFile('zpt/addDocumentViewer', globals()).__of__(self)
0
dwinter
parents:
diff changeset
477 return pt()
dwinter
parents:
diff changeset
478
dwinter
parents:
diff changeset
479 def manage_AddDocumentViewer(self,id,imageViewerUrl="",title="",RESPONSE=None):
dwinter
parents:
diff changeset
480 """add the viewer"""
dwinter
parents:
diff changeset
481 newObj=documentViewer(id,imageViewerUrl,title)
dwinter
parents:
diff changeset
482 self._setObject(id,newObj)
dwinter
parents:
diff changeset
483
dwinter
parents:
diff changeset
484 if RESPONSE is not None:
dwinter
parents:
diff changeset
485 RESPONSE.redirect('manage_main')
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
486
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
487
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
488 ##
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
489 ## DocumentViewerTemplate class
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
490 ##
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
491 class DocumentViewerTemplate(ZopePageTemplate):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
492 """Template for document viewer"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
493 meta_type="DocumentViewer Template"
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
494
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
495
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
496 def manage_addDocumentViewerTemplateForm(self):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
497 """Form for adding"""
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
498 pt=PageTemplateFile('zpt/addDocumentViewerTemplate', globals()).__of__(self)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
499 return pt()
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
500
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
501 def manage_addDocumentViewerTemplate(self, id='viewer_main', title=None, text=None,
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
502 REQUEST=None, submit=None):
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
503 "Add a Page Template with optional file content."
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
504
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
505 self._setObject(id, DocumentViewerTemplate(id))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
506 ob = getattr(self, id)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
507 ob.pt_edit(open(os.path.join(package_home(globals()),'zpt/viewer_main.zpt')).read(),None)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
508 if title:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
509 ob.pt_setTitle(title)
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
510 try:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
511 u = self.DestinationURL()
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
512 except AttributeError:
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
513 u = REQUEST['URL1']
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
514
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
515 u = "%s/%s" % (u, urllib.quote(id))
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
516 REQUEST.RESPONSE.redirect(u+'/manage_main')
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
517 return ''
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
518
ecdb238aa595 added retry when reading index meta from texter applet
casties
parents: 0
diff changeset
519
0
dwinter
parents:
diff changeset
520