Annotation of ImageArchive/ImageArchive.py, revision 1.6
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.5 dwinter 78: 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 79:
1.1 dwinter 80:
1.3 dwinter 81:
82:
1.1 dwinter 83: def download(self):
84: """download"""
1.3 dwinter 85: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&mo=rawfile,highres"
1.1 dwinter 86: #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
87: #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
88: return self.REQUEST.RESPONSE.redirect(path)
89:
90: def thumb(self):
91: """show thumb"""
1.3 dwinter 92: thumbname=os.path.splitext(self.filename)[0]+".jpg"
93: ## if not os.path.exists("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname):
94: ## image=urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:18080/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=150&mo=lores").read()
95: ## f=open("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname,"w")
96: ## f.write(image)
97: ## f.close()
98: ## 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 99:
100:
1.3 dwinter 101: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=100&dh=100&mo=lores"
102: #path="/thumbs"+self.ImageViewerPath+"/"+thumbname
103: self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path
1.1 dwinter 104: pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
105: return pt()
106:
107: def index_html(self):
108: """show image"""
109: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/digilib.jsp?fn="+self.ImageViewerPath+"/"+self.filename
110: #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
111: #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
112: return self.REQUEST.RESPONSE.redirect(path)
113:
114:
115: def manage_AddImageDigilibForm(self):
116: """Nothing yet"""
117: pt=PageTemplateFile('Products/ImageArchive/AddImageDigilibForm.zpt').__of__(self)
118: return pt()
119:
1.3 dwinter 120: def manage_AddImageDigilib(self,id,fileupload,meta=None,RESPONSE=None):
1.1 dwinter 121: """Add ImageCollection"""
122: #fileupload=self.REQUEST['fileupload']
1.3 dwinter 123: newObj=ImageDigilib(id,fileupload.filename,meta)
1.1 dwinter 124:
125: self._setObject(id,newObj)
126: getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)
127:
128: if RESPONSE is not None:
129: RESPONSE.redirect('manage_main')
130:
131:
132: class ImageCollection(Folder, Persistent, Implicit):
133: """Sammelordner für Bilder"""
134: meta_type="ImageCollection"
1.6 ! dwinter 135:
! 136: genericMetaDataType="leiden_meta"
! 137:
! 138: leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
! 139:
1.3 dwinter 140:
141: 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
142:
143: def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString):
1.1 dwinter 144: self.id=id
145: self.title=title
146: self.ImageStoragePath=ImageStoragePath
147: self.ImageViewerPath=ImageViewerPath
1.3 dwinter 148: self.defaultMetaString=defaultMetaString
1.1 dwinter 149:
150: manage_options = Folder.manage_options+(
151: {'label':'Main Config','action':'ImageCollection_config'},
152: {'label':'Import','action':'ImportFiles'},
1.6 ! dwinter 153: {'label':'Recalculate Metadata','action':'recalculateMeta'},
! 154: {'label':'Import Metadata','action':'importMetaForm'},
! 155: )
! 156:
! 157:
! 158: def importMetaForm(self):
! 159: """import metadata"""
! 160: pt=PageTemplateFile('Products/ImageArchive/importMeta.zpt').__of__(self)
! 161: return pt()
1.3 dwinter 162:
1.6 ! dwinter 163: def importMeta(self,fileupload,tag):
! 164: """import"""
! 165: filedata=fileupload.read()
! 166: dom=xml.dom.minidom.parseString(filedata)
! 167: rows=dom.getElementsByTagName(tag)
! 168: #print "ROWS",rows
! 169: request=self.REQUEST
! 170: for row in rows:
! 171:
! 172: for a in self.leiden_meta_fields:
! 173: self.REQUEST[a]=getText(row.getElementsByTagName(a)[0].childNodes)
! 174:
! 175: image_id=self.REQUEST['image_id']
! 176: if (not hasattr(self,image_id)) & (not image_id==""):
! 177: print image_id
! 178: newObj=ImageCollection(str(image_id),image_id,'','','')
! 179: self._setObject(str(image_id),newObj)
! 180:
! 181: id="leiden_meta_data_file"
! 182: self.REQUEST['id']=id
! 183: #objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)
! 184: #objectCreate=objectType.createInObjectManager(id,request)
! 185: #href="http://localhost:8080/tests/testcollection/manage_addProduct/ImageMetaData/leiden_meta_factory/"
! 186: try:
! 187: addID=getattr(self,image_id)
! 188: objectCreate=addID.manage_addProduct['ImageMetaData'].leiden_meta_add(id)
! 189: #getattr(self,image_id)._setObject(id,objectCreate)
! 190: obj=getattr(addID,id)
! 191: obj.propertysheets.meta.manage_editProperties(request)
! 192: except:
! 193: """nothing"""
! 194: return "OK"
! 195:
1.1 dwinter 196:
1.3 dwinter 197:
1.6 ! dwinter 198:
1.3 dwinter 199: def meta_default(self,filename):
200: """url der metadaten"""
201: return self.defaultMetaString % filename
202:
1.2 dwinter 203: def getThumbAttribute(self,id,attr):
204: if hasattr(self,id):
205: return getattr(getattr(self,id),attr)
206: else:
207: if attr=='title':
208: return "<b>Missing Image:%s</b>" % id
209:
210: def getThumbFunction(self,id,attr):
211: #return "DUMP"
212: if hasattr(self,id):
213: return getattr(getattr(self,id),attr)()
214:
215:
1.1 dwinter 216: def xmlinput(self,url):
217: """Anzeige von ausgewaehlten thumbs"""
218: #return url
1.5 dwinter 219:
220: url=urllib.unquote(url)
1.1 dwinter 221: xmldoc=urllib.urlopen(url).read()
1.5 dwinter 222: #print url
1.1 dwinter 223: dom=xml.dom.minidom.parseString(xmldoc)
224:
225: images=dom.getElementsByTagName('imagename')
226: rc=[]
227: for image in images:
228: text=getText(image.childNodes)
229: if not text=="":
230: rc.append(str(text))
1.2 dwinter 231: rc.sort()
1.1 dwinter 232: self.REQUEST.SESSION['filenames']=rc
233: pt=PageTemplateFile('Products/ImageArchive/overview_selected.zpt').__of__(self)
234: return pt()
235:
1.3 dwinter 236: def recalculateMeta(self):
237: """recalculate the metadata"""
238:
239: for entryid in self.__dict__:
240: entry=getattr(self,entryid)
241: if hasattr(entry,'meta_type'):
242:
243: if entry.meta_type=="ImageDigilib":
244: entry.meta=entry.meta_default(entry.getId())
245: return "OK"
1.1 dwinter 246:
247: def addImage(self):
248: """Add an Image"""
249: pt=PageTemplateFile('Products/ImageArchive/addImage.zpt').__of__(self)
250: return pt()
251:
1.3 dwinter 252: def addImage2(self,fileupload,meta,use_default,RESPONSE=None):
1.1 dwinter 253: """Add"""
254: #print "FU",fileupload
1.3 dwinter 255:
256: if use_default:
257: try:
258: meta=self.meta_default(fileupload.filename)
259: except:
260: meta=None
261:
262: manage_AddImageDigilib(self,fileupload.filename,fileupload,meta=meta)
1.1 dwinter 263: return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fileupload.filename)
264: #return self.REQUEST['URL1']+'/'+fileupload.filename
1.3 dwinter 265:
266: def ImportFiles2(self,RESPONSE=None):
267: """Import the existing files of a folder"""
268: files=os.listdir(self.ImageStoragePath)
269: ret=""
270: #print self.__dict__
271: for file in files:
272: if not file[0]==".":
273: if self.__dict__.has_key(file):
274:
275: ret=ret+"<br>"+file+" already exists!"
276: else:
277: ret=ret+"<br>"+file+" created!"
278: meta=self.meta_default(file)
279: newObj=ImageDigilib(file,file,meta)
280: #print newObj,file
281: #print newObj
282: self._setObject(file,newObj)
283: #print ret
284: #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
285: #print self.ImageStoragePath
1.5 dwinter 286: 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 287: RESPONSE.redirect('manage_main')
1.1 dwinter 288:
289: def ImportFiles(self,RESPONSE=None):
290: """Import the existing files of a folder"""
291: files=os.listdir(self.ImageStoragePath)
292: ret=""
293: #print self.__dict__
294: for file in files:
1.2 dwinter 295: if not file[0]==".":
296: if self.__dict__.has_key(file):
297:
298: ret=ret+"<br>"+file+" already exists!"
299: else:
300: ret=ret+"<br>"+file+" created!"
301: newObj=ImageDigilib(file,file)
302: #print newObj,file
303: #print newObj
1.4 dwinter 304: try:
305: self._setObject(file,newObj)
306: except:
307: """nothing yet"""
1.1 dwinter 308: #print ret
1.3 dwinter 309: #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
310: #print self.ImageStoragePath
1.5 dwinter 311: 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 312: RESPONSE.redirect('manage_main')
313:
314: def ImageCollection_config(self):
315: """Nothing yet"""
1.3 dwinter 316: if not hasattr(self,'defaultMetaString'):
317: self.defaultMetaString=""
318:
1.1 dwinter 319: pt=PageTemplateFile('Products/ImageArchive/ChangeImageCollectionForm.zpt').__of__(self)
320: return pt()
321:
1.3 dwinter 322: def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 323: """Change"""
324: self.title=title
325: self.ImageStoragePath=ImageStoragePath
326: self.ImageViewerPath=ImageViewerPath
1.3 dwinter 327: self.defaultMetaString=defaultMetaString
328:
1.1 dwinter 329: if RESPONSE is not None:
330: RESPONSE.redirect('manage_main')
331:
332: def show_selected_thumbs(self):
333: #ids=[]
334:
335: return self.REQUEST.SESSION['filenames']
336:
337: def show_thumbs(self):
338: ids=[]
339: for entry in self.__dict__:
340: #print entry
341: if hasattr(getattr(self,entry),'thumb'):
342: ids.append(entry)
1.2 dwinter 343:
1.1 dwinter 344: #print ids
1.2 dwinter 345: ids.sort()
1.1 dwinter 346: return ids
347:
1.2 dwinter 348: def show_thumbs_selected_rows(self,numberOfColumns):
349: """Ausgabe anzahl"""
350: ids=self.show_selected_thumbs()
351: self.REQUEST.SESSION['ids']=ids
352: number=int(len(ids)/numberOfColumns)+1
353: self.REQUEST.SESSION['number']=range(number)
354: return range(number+1)
355:
356: def show_thumbs_rows(self,numberOfColumns):
357: """Ausgabe anzahl"""
358: ids=self.show_thumbs()
359: self.REQUEST.SESSION['ids']=ids
360: number=int(len(ids)/numberOfColumns)+1
361:
362: return range(number+1)
363:
364: def show_thumbs_columns(self,row,numberOfColumns):
365: """Ausgabe einer Liste der Reihe"""
366: ids=self.REQUEST.SESSION['ids']
367: max=len(ids)
368: if (row*numberOfColumns)<max:
369: return ids[(row-1)*numberOfColumns:row*numberOfColumns]
370: else:
371: return ids[(row-1)*numberOfColumns:]
372: def thumblistSelected_old(self):
373: """main template collection"""
374: pt=PageTemplateFile('Products/ImageArchive/thumbselected.zpt').__of__(self)
375: return pt()
376:
1.1 dwinter 377: def thumblistSelected(self):
378: """main template collection"""
1.2 dwinter 379: pt=PageTemplateFile('Products/ImageArchive/thumbselected2.zpt').__of__(self)
380: return pt()
381:
382: def thumblist_old(self):
383: """main template collection"""
384: pt=PageTemplateFile('Products/ImageArchive/thumbs.zpt').__of__(self)
1.1 dwinter 385: return pt()
386:
387: def thumblist(self):
388: """main template collection"""
1.2 dwinter 389: pt=PageTemplateFile('Products/ImageArchive/thumb2.zpt').__of__(self)
1.1 dwinter 390: return pt()
391:
392: def navig_html(self):
393: """navigation"""
394: pt=PageTemplateFile('Products/ImageArchive/navigation.zpt').__of__(self)
395: return pt()
396:
397:
398: def index_html(self):
399: """main template collection"""
400: if self.REQUEST.has_key('filename'):
401: filen=self.REQUEST['filename']
402: else:
403: filen=""
404: self.REQUEST.SESSION['filename']=filen
405: pt=PageTemplateFile('Products/ImageArchive/overview.zpt').__of__(self)
406: return pt()
407:
408: def manage_AddImageCollectionForm(self):
409: """Nothing yet"""
410: pt=PageTemplateFile('Products/ImageArchive/AddImageCollectionForm.zpt').__of__(self)
411: return pt()
412:
1.3 dwinter 413: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 414: """Add ImageCollection"""
1.3 dwinter 415: newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
1.1 dwinter 416: self._setObject(id,newObj)
417:
418: if RESPONSE is not None:
419: RESPONSE.redirect('manage_main')
420:
421:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>