Annotation of ImageArchive/ImageArchive.py, revision 1.4
1.1 dwinter 1: from OFS.Folder import Folder
2: from OFS.SimpleItem import SimpleItem
3: from Globals import Persistent
4: from Acquisition import Implicit
5: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
6: from Products.PageTemplates.PageTemplate import PageTemplate
7: import re
8: import os
9: import os.path
10: import urllib
11: import xml.dom.minidom
12:
13: def getText(nodelist):
14:
15: rc = ""
16: for node in nodelist:
17:
18: if node.nodeType == node.TEXT_NODE:
19: rc = rc + node.data
20: return rc
21:
22:
23: class ImageDigilib(SimpleItem,Persistent,Implicit):
24: """Anzeige object fuer digilib"""
25: meta_type="ImageDigilib"
26:
1.3 dwinter 27: def __init__(self,id,filename,meta=None):
1.1 dwinter 28: self.id=id
29: self.title=filename
30: self.filename=filename
1.3 dwinter 31: self.meta=meta
1.1 dwinter 32:
1.3 dwinter 33: def getMeta(self):
34: """ausgabe der metadaten"""
35: return self.meta
36:
1.1 dwinter 37: def uploadImage(self,fileupload,path_name):
38: """upload an Image from an Requast"""
39: #path_name=self.ImageStoragePath
40: filename=path_name+"/"+fileupload.filename
41: filedata=fileupload.read()
42: f=open(filename,"w")
43: f.write(filedata)
44: f.close()
45: os.chmod(filename,0644)
1.3 dwinter 46: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath)
47:
1.1 dwinter 48:
1.3 dwinter 49:
50:
1.1 dwinter 51: def download(self):
52: """download"""
1.3 dwinter 53: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&mo=rawfile,highres"
1.1 dwinter 54: #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
55: #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
56: return self.REQUEST.RESPONSE.redirect(path)
57:
58: def thumb(self):
59: """show thumb"""
1.3 dwinter 60: thumbname=os.path.splitext(self.filename)[0]+".jpg"
61: ## if not os.path.exists("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname):
62: ## image=urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:18080/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=150&mo=lores").read()
63: ## f=open("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname,"w")
64: ## f.write(image)
65: ## f.close()
66: ## os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 150 &"% self.ImageViewerPath)
1.1 dwinter 67:
68:
1.3 dwinter 69: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=100&dh=100&mo=lores"
70: #path="/thumbs"+self.ImageViewerPath+"/"+thumbname
71: self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path
1.1 dwinter 72: pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
73: return pt()
74:
75: def index_html(self):
76: """show image"""
77: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/digilib.jsp?fn="+self.ImageViewerPath+"/"+self.filename
78: #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
79: #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
80: return self.REQUEST.RESPONSE.redirect(path)
81:
82:
83: def manage_AddImageDigilibForm(self):
84: """Nothing yet"""
85: pt=PageTemplateFile('Products/ImageArchive/AddImageDigilibForm.zpt').__of__(self)
86: return pt()
87:
1.3 dwinter 88: def manage_AddImageDigilib(self,id,fileupload,meta=None,RESPONSE=None):
1.1 dwinter 89: """Add ImageCollection"""
90: #fileupload=self.REQUEST['fileupload']
1.3 dwinter 91: newObj=ImageDigilib(id,fileupload.filename,meta)
1.1 dwinter 92:
93: self._setObject(id,newObj)
94: getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)
95:
96: if RESPONSE is not None:
97: RESPONSE.redirect('manage_main')
98:
99:
100: class ImageCollection(Folder, Persistent, Implicit):
101: """Sammelordner für Bilder"""
102: meta_type="ImageCollection"
1.3 dwinter 103:
104: defaultMetaString="http://fm-web.mpiwg-berlin.mpg.de:8050/FMRes/FMPJS?-db=Wissenschaftlerportraits.fp5&-layID=69&-token=25&-max=1&-format=formvwcss.htm&-mode=browse&images::filename=%s&-find" ## TEST FUER IMAGEDATENBANK WP
105:
106: def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString):
1.1 dwinter 107: self.id=id
108: self.title=title
109: self.ImageStoragePath=ImageStoragePath
110: self.ImageViewerPath=ImageViewerPath
1.3 dwinter 111: self.defaultMetaString=defaultMetaString
1.1 dwinter 112:
113: manage_options = Folder.manage_options+(
114: {'label':'Main Config','action':'ImageCollection_config'},
115: {'label':'Import','action':'ImportFiles'},
1.3 dwinter 116: {'label':'Recalculate Metadate','action':'recalculateMeta'},
117:
1.1 dwinter 118: )
119:
1.3 dwinter 120:
121: def meta_default(self,filename):
122: """url der metadaten"""
123: return self.defaultMetaString % filename
124:
1.2 dwinter 125: def getThumbAttribute(self,id,attr):
126: if hasattr(self,id):
127: return getattr(getattr(self,id),attr)
128: else:
129: if attr=='title':
130: return "<b>Missing Image:%s</b>" % id
131:
132: def getThumbFunction(self,id,attr):
133: #return "DUMP"
134: if hasattr(self,id):
135: return getattr(getattr(self,id),attr)()
136:
137:
1.1 dwinter 138: def xmlinput(self,url):
139: """Anzeige von ausgewaehlten thumbs"""
140: #return url
141: xmldoc=urllib.urlopen(url).read()
142:
143: dom=xml.dom.minidom.parseString(xmldoc)
144:
145: images=dom.getElementsByTagName('imagename')
146: rc=[]
147: for image in images:
148: text=getText(image.childNodes)
149: if not text=="":
150: rc.append(str(text))
1.2 dwinter 151: rc.sort()
1.1 dwinter 152: self.REQUEST.SESSION['filenames']=rc
153: pt=PageTemplateFile('Products/ImageArchive/overview_selected.zpt').__of__(self)
154: return pt()
155:
1.3 dwinter 156: def recalculateMeta(self):
157: """recalculate the metadata"""
158:
159: for entryid in self.__dict__:
160: entry=getattr(self,entryid)
161: if hasattr(entry,'meta_type'):
162:
163: if entry.meta_type=="ImageDigilib":
164: entry.meta=entry.meta_default(entry.getId())
165: return "OK"
1.1 dwinter 166:
167: def addImage(self):
168: """Add an Image"""
169: pt=PageTemplateFile('Products/ImageArchive/addImage.zpt').__of__(self)
170: return pt()
171:
1.3 dwinter 172: def addImage2(self,fileupload,meta,use_default,RESPONSE=None):
1.1 dwinter 173: """Add"""
174: #print "FU",fileupload
1.3 dwinter 175:
176: if use_default:
177: try:
178: meta=self.meta_default(fileupload.filename)
179: except:
180: meta=None
181:
182: manage_AddImageDigilib(self,fileupload.filename,fileupload,meta=meta)
1.1 dwinter 183: return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fileupload.filename)
184: #return self.REQUEST['URL1']+'/'+fileupload.filename
1.3 dwinter 185:
186: def ImportFiles2(self,RESPONSE=None):
187: """Import the existing files of a folder"""
188: files=os.listdir(self.ImageStoragePath)
189: ret=""
190: #print self.__dict__
191: for file in files:
192: if not file[0]==".":
193: if self.__dict__.has_key(file):
194:
195: ret=ret+"<br>"+file+" already exists!"
196: else:
197: ret=ret+"<br>"+file+" created!"
198: meta=self.meta_default(file)
199: newObj=ImageDigilib(file,file,meta)
200: #print newObj,file
201: #print newObj
202: self._setObject(file,newObj)
203: #print ret
204: #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
205: #print self.ImageStoragePath
206: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath)
207: RESPONSE.redirect('manage_main')
1.1 dwinter 208:
209: def ImportFiles(self,RESPONSE=None):
210: """Import the existing files of a folder"""
211: files=os.listdir(self.ImageStoragePath)
212: ret=""
213: #print self.__dict__
214: for file in files:
1.2 dwinter 215: if not file[0]==".":
216: if self.__dict__.has_key(file):
217:
218: ret=ret+"<br>"+file+" already exists!"
219: else:
220: ret=ret+"<br>"+file+" created!"
221: newObj=ImageDigilib(file,file)
222: #print newObj,file
223: #print newObj
1.4 ! dwinter 224: try:
! 225: self._setObject(file,newObj)
! 226: except:
! 227: """nothing yet"""
1.1 dwinter 228: #print ret
1.3 dwinter 229: #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
230: #print self.ImageStoragePath
231: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath)
1.1 dwinter 232: RESPONSE.redirect('manage_main')
233:
234: def ImageCollection_config(self):
235: """Nothing yet"""
1.3 dwinter 236: if not hasattr(self,'defaultMetaString'):
237: self.defaultMetaString=""
238:
1.1 dwinter 239: pt=PageTemplateFile('Products/ImageArchive/ChangeImageCollectionForm.zpt').__of__(self)
240: return pt()
241:
1.3 dwinter 242: def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 243: """Change"""
244: self.title=title
245: self.ImageStoragePath=ImageStoragePath
246: self.ImageViewerPath=ImageViewerPath
1.3 dwinter 247: self.defaultMetaString=defaultMetaString
248:
1.1 dwinter 249: if RESPONSE is not None:
250: RESPONSE.redirect('manage_main')
251:
252: def show_selected_thumbs(self):
253: #ids=[]
254:
255: return self.REQUEST.SESSION['filenames']
256:
257: def show_thumbs(self):
258: ids=[]
259: for entry in self.__dict__:
260: #print entry
261: if hasattr(getattr(self,entry),'thumb'):
262: ids.append(entry)
1.2 dwinter 263:
1.1 dwinter 264: #print ids
1.2 dwinter 265: ids.sort()
1.1 dwinter 266: return ids
267:
1.2 dwinter 268: def show_thumbs_selected_rows(self,numberOfColumns):
269: """Ausgabe anzahl"""
270: ids=self.show_selected_thumbs()
271: self.REQUEST.SESSION['ids']=ids
272: number=int(len(ids)/numberOfColumns)+1
273: self.REQUEST.SESSION['number']=range(number)
274: return range(number+1)
275:
276: def show_thumbs_rows(self,numberOfColumns):
277: """Ausgabe anzahl"""
278: ids=self.show_thumbs()
279: self.REQUEST.SESSION['ids']=ids
280: number=int(len(ids)/numberOfColumns)+1
281:
282: return range(number+1)
283:
284: def show_thumbs_columns(self,row,numberOfColumns):
285: """Ausgabe einer Liste der Reihe"""
286: ids=self.REQUEST.SESSION['ids']
287: max=len(ids)
288: if (row*numberOfColumns)<max:
289: return ids[(row-1)*numberOfColumns:row*numberOfColumns]
290: else:
291: return ids[(row-1)*numberOfColumns:]
292: def thumblistSelected_old(self):
293: """main template collection"""
294: pt=PageTemplateFile('Products/ImageArchive/thumbselected.zpt').__of__(self)
295: return pt()
296:
1.1 dwinter 297: def thumblistSelected(self):
298: """main template collection"""
1.2 dwinter 299: pt=PageTemplateFile('Products/ImageArchive/thumbselected2.zpt').__of__(self)
300: return pt()
301:
302: def thumblist_old(self):
303: """main template collection"""
304: pt=PageTemplateFile('Products/ImageArchive/thumbs.zpt').__of__(self)
1.1 dwinter 305: return pt()
306:
307: def thumblist(self):
308: """main template collection"""
1.2 dwinter 309: pt=PageTemplateFile('Products/ImageArchive/thumb2.zpt').__of__(self)
1.1 dwinter 310: return pt()
311:
312: def navig_html(self):
313: """navigation"""
314: pt=PageTemplateFile('Products/ImageArchive/navigation.zpt').__of__(self)
315: return pt()
316:
317:
318: def index_html(self):
319: """main template collection"""
320: if self.REQUEST.has_key('filename'):
321: filen=self.REQUEST['filename']
322: else:
323: filen=""
324: self.REQUEST.SESSION['filename']=filen
325: pt=PageTemplateFile('Products/ImageArchive/overview.zpt').__of__(self)
326: return pt()
327:
328: def manage_AddImageCollectionForm(self):
329: """Nothing yet"""
330: pt=PageTemplateFile('Products/ImageArchive/AddImageCollectionForm.zpt').__of__(self)
331: return pt()
332:
1.3 dwinter 333: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 334: """Add ImageCollection"""
1.3 dwinter 335: newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
1.1 dwinter 336: self._setObject(id,newObj)
337:
338: if RESPONSE is not None:
339: RESPONSE.redirect('manage_main')
340:
341:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>