Annotation of ImageArchive/ImageArchive.py, revision 1.7
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:
1.6 dwinter 23: class ImageDigilib(Folder,Persistent,Implicit):
1.1 dwinter 24: """Anzeige object fuer digilib"""
25: meta_type="ImageDigilib"
26:
1.6 dwinter 27: leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
28:
29: manage_options = Folder.manage_options+(
30:
31: {'label':'Add Metadata','action':'addMetaObjectForm'},
32:
33: )
34:
35: def addMetaObject(self,id,RESPONSE=None):
36: """Add an MetaObject"""
37: objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)
38:
39: request=self.REQUEST
40: objectCreate=objectType.createObjectManager(id,request)
41: #for field in self.leiden_meta_fields:
42: # self.REQUEST[field]=argv[field]
43: self._setObject(id,objectCreate)
44:
45: objectCreate.propertysheets.meta.manage_editProperties(request)
46:
47: if RESPONSE is not None:
48: RESPONSE.redirect('manage_main')
49:
50:
51:
52:
53: def addMetaObjectForm(self):
54: """Add Form"""
55: pt=PageTemplateFile('Products/ImageArchive/addMetaObject.zpt').__of__(self)
56: return pt()
57:
58:
1.3 dwinter 59: def __init__(self,id,filename,meta=None):
1.1 dwinter 60: self.id=id
61: self.title=filename
62: self.filename=filename
1.3 dwinter 63: self.meta=meta
1.1 dwinter 64:
1.3 dwinter 65: def getMeta(self):
66: """ausgabe der metadaten"""
67: return self.meta
68:
1.1 dwinter 69: def uploadImage(self,fileupload,path_name):
70: """upload an Image from an Requast"""
71: #path_name=self.ImageStoragePath
72: filename=path_name+"/"+fileupload.filename
73: filedata=fileupload.read()
74: f=open(filename,"w")
75: f.write(filedata)
76: f.close()
77: os.chmod(filename,0644)
1.7 ! dwinter 78: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath)
1.3 dwinter 79:
1.7 ! dwinter 80:
1.1 dwinter 81:
1.3 dwinter 82:
83:
1.1 dwinter 84: def download(self):
85: """download"""
1.3 dwinter 86: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&mo=rawfile,highres"
1.1 dwinter 87: #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
88: #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
89: return self.REQUEST.RESPONSE.redirect(path)
90:
91: def thumb(self):
92: """show thumb"""
1.3 dwinter 93: thumbname=os.path.splitext(self.filename)[0]+".jpg"
94: ## if not os.path.exists("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname):
95: ## image=urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:18080/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=150&mo=lores").read()
96: ## f=open("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname,"w")
97: ## f.write(image)
98: ## f.close()
99: ## 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 100:
101:
1.3 dwinter 102: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=100&dh=100&mo=lores"
103: #path="/thumbs"+self.ImageViewerPath+"/"+thumbname
104: self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path
1.1 dwinter 105: pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
106: return pt()
107:
108: def index_html(self):
109: """show image"""
110: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/digilib.jsp?fn="+self.ImageViewerPath+"/"+self.filename
111: #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
112: #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
113: return self.REQUEST.RESPONSE.redirect(path)
114:
115:
116: def manage_AddImageDigilibForm(self):
117: """Nothing yet"""
118: pt=PageTemplateFile('Products/ImageArchive/AddImageDigilibForm.zpt').__of__(self)
119: return pt()
120:
1.3 dwinter 121: def manage_AddImageDigilib(self,id,fileupload,meta=None,RESPONSE=None):
1.1 dwinter 122: """Add ImageCollection"""
123: #fileupload=self.REQUEST['fileupload']
1.3 dwinter 124: newObj=ImageDigilib(id,fileupload.filename,meta)
1.1 dwinter 125:
126: self._setObject(id,newObj)
127: getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)
128:
129: if RESPONSE is not None:
130: RESPONSE.redirect('manage_main')
131:
132:
133: class ImageCollection(Folder, Persistent, Implicit):
134: """Sammelordner für Bilder"""
135: meta_type="ImageCollection"
1.6 dwinter 136:
137: genericMetaDataType="leiden_meta"
138:
139: leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
140:
1.3 dwinter 141:
142: 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
1.7 ! dwinter 143:
! 144: def scaleThumbs(self):
! 145: """scale thumbs"""
! 146: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath)
! 147: return "RESCALING STARTED"
1.3 dwinter 148:
149: def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString):
1.1 dwinter 150: self.id=id
151: self.title=title
152: self.ImageStoragePath=ImageStoragePath
153: self.ImageViewerPath=ImageViewerPath
1.3 dwinter 154: self.defaultMetaString=defaultMetaString
1.1 dwinter 155:
156: manage_options = Folder.manage_options+(
157: {'label':'Main Config','action':'ImageCollection_config'},
158: {'label':'Import','action':'ImportFiles'},
1.6 dwinter 159: {'label':'Recalculate Metadata','action':'recalculateMeta'},
160: {'label':'Import Metadata','action':'importMetaForm'},
1.7 ! dwinter 161: {'label':'Rescale thumbs','action':'scaleThumbs'},
1.6 dwinter 162: )
163:
164:
165: def importMetaForm(self):
166: """import metadata"""
167: pt=PageTemplateFile('Products/ImageArchive/importMeta.zpt').__of__(self)
168: return pt()
1.3 dwinter 169:
1.6 dwinter 170: def importMeta(self,fileupload,tag):
171: """import"""
172: filedata=fileupload.read()
173: dom=xml.dom.minidom.parseString(filedata)
174: rows=dom.getElementsByTagName(tag)
175: #print "ROWS",rows
176: request=self.REQUEST
177: for row in rows:
178:
179: for a in self.leiden_meta_fields:
180: self.REQUEST[a]=getText(row.getElementsByTagName(a)[0].childNodes)
181:
182: image_id=self.REQUEST['image_id']
183: if (not hasattr(self,image_id)) & (not image_id==""):
184: print image_id
185: newObj=ImageCollection(str(image_id),image_id,'','','')
186: self._setObject(str(image_id),newObj)
187:
188: id="leiden_meta_data_file"
189: self.REQUEST['id']=id
190: #objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)
191: #objectCreate=objectType.createInObjectManager(id,request)
192: #href="http://localhost:8080/tests/testcollection/manage_addProduct/ImageMetaData/leiden_meta_factory/"
193: try:
194: addID=getattr(self,image_id)
195: objectCreate=addID.manage_addProduct['ImageMetaData'].leiden_meta_add(id)
196: #getattr(self,image_id)._setObject(id,objectCreate)
197: obj=getattr(addID,id)
198: obj.propertysheets.meta.manage_editProperties(request)
199: except:
200: """nothing"""
201: return "OK"
202:
1.1 dwinter 203:
1.7 ! dwinter 204: def nextImage(self,request,selected=None):
! 205: """show nextimage"""
! 206: ids=self.show_thumbs()
! 207: if request.SESSION.has_key("filename"):
! 208: filename=request.SESSION["filename"]
! 209: try:
! 210: nr=ids.index(filename)
! 211: except:
! 212: nr=0
! 213: else:
! 214: nr=0
! 215:
! 216: if nr==len(ids)-1:
! 217: return ""
! 218: else:
! 219: if selected:
! 220: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr+1]+"\" target=\"_top\">next image</a>"
! 221: else:
! 222: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr+1]+"\" target=\"_top\">next image</a>"
! 223:
! 224: def prevImage(self,request,selected=None):
! 225: """show nextimage"""
! 226: #return self.getId()
! 227: ids=self.show_thumbs()
! 228: if request.SESSION.has_key("filename"):
! 229: filename=request.SESSION["filename"]
! 230: try:
! 231: nr=ids.index(filename)
! 232: except:
! 233: nr=0
! 234: else:
! 235: nr=0
1.3 dwinter 236:
1.7 ! dwinter 237: if nr==0:
! 238: return ""
! 239: else:
! 240: if selected:
! 241: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr-1]+"\" target=\"_top\">previous image</a>"
! 242: else:
! 243: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr-1]+"\" target=\"_top\">previous image</a>"
1.6 dwinter 244:
1.3 dwinter 245: def meta_default(self,filename):
246: """url der metadaten"""
247: return self.defaultMetaString % filename
248:
1.2 dwinter 249: def getThumbAttribute(self,id,attr):
250: if hasattr(self,id):
251: return getattr(getattr(self,id),attr)
252: else:
253: if attr=='title':
254: return "<b>Missing Image:%s</b>" % id
255:
256: def getThumbFunction(self,id,attr):
257: #return "DUMP"
258: if hasattr(self,id):
259: return getattr(getattr(self,id),attr)()
260:
261:
1.1 dwinter 262: def xmlinput(self,url):
263: """Anzeige von ausgewaehlten thumbs"""
264: #return url
1.5 dwinter 265:
266: url=urllib.unquote(url)
1.1 dwinter 267: xmldoc=urllib.urlopen(url).read()
1.5 dwinter 268: #print url
1.1 dwinter 269: dom=xml.dom.minidom.parseString(xmldoc)
270:
271: images=dom.getElementsByTagName('imagename')
272: rc=[]
273: for image in images:
274: text=getText(image.childNodes)
275: if not text=="":
276: rc.append(str(text))
1.2 dwinter 277: rc.sort()
1.1 dwinter 278: self.REQUEST.SESSION['filenames']=rc
279: pt=PageTemplateFile('Products/ImageArchive/overview_selected.zpt').__of__(self)
280: return pt()
281:
1.3 dwinter 282: def recalculateMeta(self):
283: """recalculate the metadata"""
284:
285: for entryid in self.__dict__:
286: entry=getattr(self,entryid)
287: if hasattr(entry,'meta_type'):
288:
289: if entry.meta_type=="ImageDigilib":
290: entry.meta=entry.meta_default(entry.getId())
291: return "OK"
1.1 dwinter 292:
293: def addImage(self):
294: """Add an Image"""
295: pt=PageTemplateFile('Products/ImageArchive/addImage.zpt').__of__(self)
296: return pt()
297:
1.7 ! dwinter 298: def addImage2(self,fileupload,meta,use_default=None,RESPONSE=None):
1.1 dwinter 299: """Add"""
300: #print "FU",fileupload
1.3 dwinter 301:
302: if use_default:
303: try:
304: meta=self.meta_default(fileupload.filename)
305: except:
306: meta=None
1.7 ! dwinter 307: else:
! 308: meta=None
1.3 dwinter 309:
310: manage_AddImageDigilib(self,fileupload.filename,fileupload,meta=meta)
1.1 dwinter 311: return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fileupload.filename)
312: #return self.REQUEST['URL1']+'/'+fileupload.filename
1.3 dwinter 313:
314: def ImportFiles2(self,RESPONSE=None):
315: """Import the existing files of a folder"""
316: files=os.listdir(self.ImageStoragePath)
317: ret=""
318: #print self.__dict__
319: for file in files:
320: if not file[0]==".":
321: if self.__dict__.has_key(file):
322:
323: ret=ret+"<br>"+file+" already exists!"
324: else:
325: ret=ret+"<br>"+file+" created!"
326: meta=self.meta_default(file)
327: newObj=ImageDigilib(file,file,meta)
328: #print newObj,file
329: #print newObj
330: self._setObject(file,newObj)
331: #print ret
332: #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
333: #print self.ImageStoragePath
1.5 dwinter 334: 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 335: RESPONSE.redirect('manage_main')
1.1 dwinter 336:
337: def ImportFiles(self,RESPONSE=None):
338: """Import the existing files of a folder"""
339: files=os.listdir(self.ImageStoragePath)
340: ret=""
341: #print self.__dict__
342: for file in files:
1.2 dwinter 343: if not file[0]==".":
344: if self.__dict__.has_key(file):
345:
346: ret=ret+"<br>"+file+" already exists!"
347: else:
348: ret=ret+"<br>"+file+" created!"
349: newObj=ImageDigilib(file,file)
350: #print newObj,file
351: #print newObj
1.4 dwinter 352: try:
353: self._setObject(file,newObj)
354: except:
355: """nothing yet"""
1.1 dwinter 356: #print ret
1.3 dwinter 357: #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
358: #print self.ImageStoragePath
1.7 ! dwinter 359: 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 360: RESPONSE.redirect('manage_main')
361:
362: def ImageCollection_config(self):
363: """Nothing yet"""
1.3 dwinter 364: if not hasattr(self,'defaultMetaString'):
365: self.defaultMetaString=""
366:
1.1 dwinter 367: pt=PageTemplateFile('Products/ImageArchive/ChangeImageCollectionForm.zpt').__of__(self)
368: return pt()
369:
1.3 dwinter 370: def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 371: """Change"""
372: self.title=title
373: self.ImageStoragePath=ImageStoragePath
374: self.ImageViewerPath=ImageViewerPath
1.3 dwinter 375: self.defaultMetaString=defaultMetaString
376:
1.1 dwinter 377: if RESPONSE is not None:
378: RESPONSE.redirect('manage_main')
379:
380: def show_selected_thumbs(self):
381: #ids=[]
382:
383: return self.REQUEST.SESSION['filenames']
384:
385: def show_thumbs(self):
386: ids=[]
387: for entry in self.__dict__:
388: #print entry
389: if hasattr(getattr(self,entry),'thumb'):
390: ids.append(entry)
1.2 dwinter 391:
1.1 dwinter 392: #print ids
1.2 dwinter 393: ids.sort()
1.1 dwinter 394: return ids
395:
1.2 dwinter 396: def show_thumbs_selected_rows(self,numberOfColumns):
397: """Ausgabe anzahl"""
398: ids=self.show_selected_thumbs()
399: self.REQUEST.SESSION['ids']=ids
400: number=int(len(ids)/numberOfColumns)+1
401: self.REQUEST.SESSION['number']=range(number)
402: return range(number+1)
403:
404: def show_thumbs_rows(self,numberOfColumns):
405: """Ausgabe anzahl"""
406: ids=self.show_thumbs()
407: self.REQUEST.SESSION['ids']=ids
408: number=int(len(ids)/numberOfColumns)+1
409:
410: return range(number+1)
411:
412: def show_thumbs_columns(self,row,numberOfColumns):
413: """Ausgabe einer Liste der Reihe"""
414: ids=self.REQUEST.SESSION['ids']
415: max=len(ids)
416: if (row*numberOfColumns)<max:
417: return ids[(row-1)*numberOfColumns:row*numberOfColumns]
418: else:
419: return ids[(row-1)*numberOfColumns:]
420: def thumblistSelected_old(self):
421: """main template collection"""
422: pt=PageTemplateFile('Products/ImageArchive/thumbselected.zpt').__of__(self)
423: return pt()
424:
1.1 dwinter 425: def thumblistSelected(self):
426: """main template collection"""
1.2 dwinter 427: pt=PageTemplateFile('Products/ImageArchive/thumbselected2.zpt').__of__(self)
428: return pt()
429:
430: def thumblist_old(self):
431: """main template collection"""
432: pt=PageTemplateFile('Products/ImageArchive/thumbs.zpt').__of__(self)
1.1 dwinter 433: return pt()
434:
435: def thumblist(self):
436: """main template collection"""
1.2 dwinter 437: pt=PageTemplateFile('Products/ImageArchive/thumb2.zpt').__of__(self)
1.1 dwinter 438: return pt()
439:
1.7 ! dwinter 440: def navig_selected_html(self):
! 441: """navigation"""
! 442: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
! 443: pt=PageTemplateFile('Products/ImageArchive/navigation_selected.zpt').__of__(self)
! 444: return pt()
! 445:
1.1 dwinter 446: def navig_html(self):
447: """navigation"""
1.7 ! dwinter 448: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
1.1 dwinter 449: pt=PageTemplateFile('Products/ImageArchive/navigation.zpt').__of__(self)
450: return pt()
451:
452:
1.7 ! dwinter 453: def selection(self):
! 454: """show only selected"""
! 455: if self.REQUEST.has_key('filename'):
! 456: filen=self.REQUEST['filename']
! 457: else:
! 458: filen=""
! 459: self.REQUEST.SESSION['filename']=filen
! 460: pt=PageTemplateFile('Products/ImageArchive/overview_selected2.zpt').__of__(self)
! 461: return pt()
! 462:
1.1 dwinter 463: def index_html(self):
464: """main template collection"""
465: if self.REQUEST.has_key('filename'):
466: filen=self.REQUEST['filename']
467: else:
468: filen=""
469: self.REQUEST.SESSION['filename']=filen
470: pt=PageTemplateFile('Products/ImageArchive/overview.zpt').__of__(self)
471: return pt()
472:
473: def manage_AddImageCollectionForm(self):
474: """Nothing yet"""
475: pt=PageTemplateFile('Products/ImageArchive/AddImageCollectionForm.zpt').__of__(self)
476: return pt()
477:
1.3 dwinter 478: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 479: """Add ImageCollection"""
1.3 dwinter 480: newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
1.1 dwinter 481: self._setObject(id,newObj)
482:
483: if RESPONSE is not None:
484: RESPONSE.redirect('manage_main')
485:
486:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>