Annotation of ImageArchive/ImageArchive.py, revision 1.5
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.5 ! dwinter 46: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageStoragePath)
1.3 dwinter 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
1.5 ! dwinter 141:
! 142: url=urllib.unquote(url)
1.1 dwinter 143: xmldoc=urllib.urlopen(url).read()
1.5 ! dwinter 144: #print url
1.1 dwinter 145: dom=xml.dom.minidom.parseString(xmldoc)
146:
147: images=dom.getElementsByTagName('imagename')
148: rc=[]
149: for image in images:
150: text=getText(image.childNodes)
151: if not text=="":
152: rc.append(str(text))
1.2 dwinter 153: rc.sort()
1.1 dwinter 154: self.REQUEST.SESSION['filenames']=rc
155: pt=PageTemplateFile('Products/ImageArchive/overview_selected.zpt').__of__(self)
156: return pt()
157:
1.3 dwinter 158: def recalculateMeta(self):
159: """recalculate the metadata"""
160:
161: for entryid in self.__dict__:
162: entry=getattr(self,entryid)
163: if hasattr(entry,'meta_type'):
164:
165: if entry.meta_type=="ImageDigilib":
166: entry.meta=entry.meta_default(entry.getId())
167: return "OK"
1.1 dwinter 168:
169: def addImage(self):
170: """Add an Image"""
171: pt=PageTemplateFile('Products/ImageArchive/addImage.zpt').__of__(self)
172: return pt()
173:
1.3 dwinter 174: def addImage2(self,fileupload,meta,use_default,RESPONSE=None):
1.1 dwinter 175: """Add"""
176: #print "FU",fileupload
1.3 dwinter 177:
178: if use_default:
179: try:
180: meta=self.meta_default(fileupload.filename)
181: except:
182: meta=None
183:
184: manage_AddImageDigilib(self,fileupload.filename,fileupload,meta=meta)
1.1 dwinter 185: return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fileupload.filename)
186: #return self.REQUEST['URL1']+'/'+fileupload.filename
1.3 dwinter 187:
188: def ImportFiles2(self,RESPONSE=None):
189: """Import the existing files of a folder"""
190: files=os.listdir(self.ImageStoragePath)
191: ret=""
192: #print self.__dict__
193: for file in files:
194: if not file[0]==".":
195: if self.__dict__.has_key(file):
196:
197: ret=ret+"<br>"+file+" already exists!"
198: else:
199: ret=ret+"<br>"+file+" created!"
200: meta=self.meta_default(file)
201: newObj=ImageDigilib(file,file,meta)
202: #print newObj,file
203: #print newObj
204: self._setObject(file,newObj)
205: #print ret
206: #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
207: #print self.ImageStoragePath
1.5 ! dwinter 208: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageStoragePath)
1.3 dwinter 209: RESPONSE.redirect('manage_main')
1.1 dwinter 210:
211: def ImportFiles(self,RESPONSE=None):
212: """Import the existing files of a folder"""
213: files=os.listdir(self.ImageStoragePath)
214: ret=""
215: #print self.__dict__
216: for file in files:
1.2 dwinter 217: if not file[0]==".":
218: if self.__dict__.has_key(file):
219:
220: ret=ret+"<br>"+file+" already exists!"
221: else:
222: ret=ret+"<br>"+file+" created!"
223: newObj=ImageDigilib(file,file)
224: #print newObj,file
225: #print newObj
1.4 dwinter 226: try:
227: self._setObject(file,newObj)
228: except:
229: """nothing yet"""
1.1 dwinter 230: #print ret
1.3 dwinter 231: #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
232: #print self.ImageStoragePath
1.5 ! dwinter 233: print os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageStoragePath)
1.1 dwinter 234: RESPONSE.redirect('manage_main')
235:
236: def ImageCollection_config(self):
237: """Nothing yet"""
1.3 dwinter 238: if not hasattr(self,'defaultMetaString'):
239: self.defaultMetaString=""
240:
1.1 dwinter 241: pt=PageTemplateFile('Products/ImageArchive/ChangeImageCollectionForm.zpt').__of__(self)
242: return pt()
243:
1.3 dwinter 244: def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 245: """Change"""
246: self.title=title
247: self.ImageStoragePath=ImageStoragePath
248: self.ImageViewerPath=ImageViewerPath
1.3 dwinter 249: self.defaultMetaString=defaultMetaString
250:
1.1 dwinter 251: if RESPONSE is not None:
252: RESPONSE.redirect('manage_main')
253:
254: def show_selected_thumbs(self):
255: #ids=[]
256:
257: return self.REQUEST.SESSION['filenames']
258:
259: def show_thumbs(self):
260: ids=[]
261: for entry in self.__dict__:
262: #print entry
263: if hasattr(getattr(self,entry),'thumb'):
264: ids.append(entry)
1.2 dwinter 265:
1.1 dwinter 266: #print ids
1.2 dwinter 267: ids.sort()
1.1 dwinter 268: return ids
269:
1.2 dwinter 270: def show_thumbs_selected_rows(self,numberOfColumns):
271: """Ausgabe anzahl"""
272: ids=self.show_selected_thumbs()
273: self.REQUEST.SESSION['ids']=ids
274: number=int(len(ids)/numberOfColumns)+1
275: self.REQUEST.SESSION['number']=range(number)
276: return range(number+1)
277:
278: def show_thumbs_rows(self,numberOfColumns):
279: """Ausgabe anzahl"""
280: ids=self.show_thumbs()
281: self.REQUEST.SESSION['ids']=ids
282: number=int(len(ids)/numberOfColumns)+1
283:
284: return range(number+1)
285:
286: def show_thumbs_columns(self,row,numberOfColumns):
287: """Ausgabe einer Liste der Reihe"""
288: ids=self.REQUEST.SESSION['ids']
289: max=len(ids)
290: if (row*numberOfColumns)<max:
291: return ids[(row-1)*numberOfColumns:row*numberOfColumns]
292: else:
293: return ids[(row-1)*numberOfColumns:]
294: def thumblistSelected_old(self):
295: """main template collection"""
296: pt=PageTemplateFile('Products/ImageArchive/thumbselected.zpt').__of__(self)
297: return pt()
298:
1.1 dwinter 299: def thumblistSelected(self):
300: """main template collection"""
1.2 dwinter 301: pt=PageTemplateFile('Products/ImageArchive/thumbselected2.zpt').__of__(self)
302: return pt()
303:
304: def thumblist_old(self):
305: """main template collection"""
306: pt=PageTemplateFile('Products/ImageArchive/thumbs.zpt').__of__(self)
1.1 dwinter 307: return pt()
308:
309: def thumblist(self):
310: """main template collection"""
1.2 dwinter 311: pt=PageTemplateFile('Products/ImageArchive/thumb2.zpt').__of__(self)
1.1 dwinter 312: return pt()
313:
314: def navig_html(self):
315: """navigation"""
316: pt=PageTemplateFile('Products/ImageArchive/navigation.zpt').__of__(self)
317: return pt()
318:
319:
320: def index_html(self):
321: """main template collection"""
322: if self.REQUEST.has_key('filename'):
323: filen=self.REQUEST['filename']
324: else:
325: filen=""
326: self.REQUEST.SESSION['filename']=filen
327: pt=PageTemplateFile('Products/ImageArchive/overview.zpt').__of__(self)
328: return pt()
329:
330: def manage_AddImageCollectionForm(self):
331: """Nothing yet"""
332: pt=PageTemplateFile('Products/ImageArchive/AddImageCollectionForm.zpt').__of__(self)
333: return pt()
334:
1.3 dwinter 335: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 336: """Add ImageCollection"""
1.3 dwinter 337: newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
1.1 dwinter 338: self._setObject(id,newObj)
339:
340: if RESPONSE is not None:
341: RESPONSE.redirect('manage_main')
342:
343:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>