--- ImageArchive/ImageArchive.py 2004/07/22 16:32:27 1.24 +++ ImageArchive/ImageArchive.py 2004/11/11 19:12:39 1.31 @@ -9,6 +9,13 @@ import os import os.path import urllib import xml.dom.minidom +import operator +import tempfile +import shutil + +def splitPath(str): + str2=str.replace("\\","/") + return os.path.split(str2)[1] def getText(nodelist): @@ -68,7 +75,8 @@ class ImageDigilib(Folder,Persistent,Imp def uploadImage(self,fileupload,path_name): """upload an Image from an Requast""" #path_name=self.ImageStoragePath - filename=path_name+"/"+fileupload.filename + fn=splitPath(fileupload.filename) + filename=path_name+"/"+fn filedata=fileupload.read() f=open(filename,"w") f.write(filedata) @@ -82,14 +90,21 @@ class ImageDigilib(Folder,Persistent,Imp - - + def download(self): """download""" path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&mo=rawfile,hires" - #self.REQUEST.SESSION['string']=""% path - #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self) - return self.REQUEST.RESPONSE.redirect(path) + if self.REQUEST.SESSION.has_key('filenamesIds') and self.REQUEST.SESSION['filenamesIds'].has_key(self.filename): + filename=self.REQUEST.SESSION['filenamesIds'][self.filename][0]+"_"+self.filename + else: + filename=self.filename + + self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%filename) + self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") + image=urllib.urlopen(path).read() + self.REQUEST.RESPONSE.write(image) + self.REQUEST.RESPONSE.close() + #return self.REQUEST.RESPONSE.redirect(path) def thumb(self): """show thumb""" @@ -129,7 +144,8 @@ def manage_AddImageDigilibForm(self): def manage_AddImageDigilib(self,id,fileupload,meta=None,RESPONSE=None): """Add ImageCollection""" #fileupload=self.REQUEST['fileupload'] - newObj=ImageDigilib(id,fileupload.filename,meta) + fn=splitPath(fileupload.filename) + newObj=ImageDigilib(id,fn,meta) self._setObject(id,newObj) getattr(self,id).uploadImage(fileupload,self.ImageStoragePath) @@ -149,10 +165,132 @@ class ImageCollection(Folder, Persistent 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 - def scaleThumbs(self): + + + def createSet(self,RESPONSE=None): + """download aller gewaehlten files""" + tempfile.tempdir="/tmp/archivesImageServer" + + tmpPath=tempfile.mktemp() + + + tmpZip=tempfile.mktemp()+".zip" + tmpFn=os.path.split(tmpZip)[1] + + + if not os.path.exists(tempfile.tempdir): + os.mkdir(tempfile.tempdir) + + if not os.path.exists(tmpPath): + os.mkdir(tmpPath) + + + if RESPONSE: + RESPONSE.setHeader("Content-Type","text/html") + RESPONSE.write("
I forgot, the selected files. Please reselect.\n") + return 0 + + for id in self.REQUEST.SESSION['filenames']: + path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+urllib.quote(id[0])+"&mo=rawfile,hires" + + image=urllib.urlopen(path).read() + if self.REQUEST.SESSION.has_key('filenamesIds') and self.REQUEST.SESSION['filenamesIds'].has_key(id[0]): + filename=self.REQUEST.SESSION['filenamesIds'][id[0]][0]+"_"+id[0] + else: + filename=id[0] + + + + fh=file(tmpPath+"/"+filename,"w") + if RESPONSE: + RESPONSE.write(str("
Get File: %s
\n"%filename))
+
+ fh.write(image)
+
+ #folgeseiten
+ if int(self.REQUEST.SESSION['filenamesIds'][id[0]][1])>1:
+ ids=self.show_thumbs()
+ nr=ids.index(id[0])
+
+ numberOfPages=self.REQUEST.SESSION['filenamesIds'][id[0]][1]
+ for k in range(int(numberOfPages)-1):
+ i=k+1
+
+ path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"&/"+ids[nr+i]+"&mo=rawfile,hires"
+
+ image=urllib.urlopen(path).read()
+ if self.REQUEST.SESSION.has_key('filenamesIds') and self.REQUEST.SESSION['filenamesIds'].has_key(id[0]):
+ filename=self.REQUEST.SESSION['filenamesIds'][id[0]][0]+"_"+ids[nr+i]
+ else:
+ filename=id[0]
+
+
+
+ fh=file(tmpPath+"/"+filename,"w")
+ if RESPONSE:
+ RESPONSE.write(str("
Get File: %s
\n"%filename))
+
+ fh.write(image)
+
+
+ fh.close()
+
+ if RESPONSE:
+ RESPONSE.write("
Create Zip
")
+ RESPONSE.write("
This can take a while....
\n")
+ if RESPONSE:
+ fh=os.popen2("zip -u %s %s/*"%(tmpZip,tmpPath),1)[1]
+ RESPONSE.write("
")
+ for c in fh.read():
+ RESPONSE.write(c)
+
+ if c==")":
+ RESPONSE.write("
\n")
+
+
+ else:
+ os.popen("zip -u %s %s/*"%(tmpZip,tmpPath))
+
+
+ shutil.rmtree(tmpPath)
+
+ if RESPONSE:
+ RESPONSE.write("
finished
\n")
+
+ if RESPONSE:
+ len=os.stat(tmpZip)[6]
+ downloadUrl=self.absolute_url()+"/downloadSet"
+ RESPONSE.write("""
The file will be stored for a while, you can download it later, the URL is:
+%s?fn=%s\n"""%(tmpFn,downloadUrl,tmpFn))
+ RESPONSE.close()
+
+ def downloadSet(self,fn):
+ """download prepared set"""
+ filename="/tmp/archivesImageServer/"+fn
+
+ self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%"image.zip")
+ self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
+ len=os.stat(filename)[6]
+ self.REQUEST.RESPONSE.setHeader("Content-Length",len)
+ images=file(filename).read()
+ self.REQUEST.RESPONSE.write(images)
+ self.REQUEST.RESPONSE.close()
+
+
+
+ def scaleThumbs(self,RESPONSE=None):
"""scale thumbs"""
- os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath)
- return "RESCALING STARTED"
+
+
+ os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ -dir=%s -dest=/mpiwg/temp/online/scaled/thumb -scaleto=100 &"% self.ImageViewerPath)
+ return "RESCALING STARTED"
def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString):
self.id=id
@@ -222,7 +360,7 @@ class ImageCollection(Folder, Persistent
return "OK"
- def nextImage(self,request,selected=None):
+ def nextImage(self,request,selected=None,returnFn=None):
"""show nextimage"""
try:
ids=self.show_thumbs()
@@ -230,14 +368,18 @@ class ImageCollection(Folder, Persistent
filename=request.SESSION["filename"]
try:
nr=ids.index(filename)
+
except:
nr=0
else:
nr=0
if nr==len(ids)-1:
- return ""
+ return ""
else:
+ if returnFn:
+ return ids[nr+1]
+
if selected:
return "next image"
else:
@@ -293,16 +435,29 @@ class ImageCollection(Folder, Persistent
url=urllib.unquote(url)
xmldoc=urllib.urlopen(url).read()
#print url
- dom=xml.dom.minidom.parseString(xmldoc)
-
- images=dom.getElementsByTagName('imagename')
+ try:
+ dom=xml.dom.minidom.parseString(xmldoc)
+ except:
+ return xmldoc
+ images=dom.getElementsByTagName('image')
+
rc=[]
+ fnIds={}
for image in images:
- text=getText(image.childNodes)
- if not text=="":
- rc.append(str(text))
+ imagename=image.getElementsByTagName('imagename')[0]
+ text=getText(imagename.childNodes)
+ idnr=image.getElementsByTagName('idnr')[0]
+ id=getText(idnr.childNodes)
+ numberOfPages=image.getElementsByTagName('numberOfPages')[0]
+ nop=getText(numberOfPages.childNodes)
+
+ if not text=="":
+ rc.append((str(text),id,nop))
+ fnIds[str(text)]=(id,nop)
rc.sort()
self.REQUEST.SESSION['filenames']=rc
+ self.REQUEST.SESSION['filenamesIds']=fnIds
+
pt=PageTemplateFile('Products/ImageArchive/zpt/overview_selected.zpt').__of__(self)
return pt()
@@ -333,9 +488,10 @@ class ImageCollection(Folder, Persistent
meta=None
else:
meta=None
-
- manage_AddImageDigilib(self,fileupload.filename,fileupload,meta=meta)
- return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fileupload.filename)
+ fn=splitPath(fileupload.filename)
+
+ manage_AddImageDigilib(self,fn,fileupload,meta=meta)
+ return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fn)
#return self.REQUEST['URL1']+'/'+fileupload.filename
def ImportFiles2(self,RESPONSE=None):
@@ -358,7 +514,8 @@ class ImageCollection(Folder, Persistent
#print ret
#pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
#print self.ImageStoragePath
- os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath)
+ os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ -dir=%s -dest=/mpiwg/temp/online/scaled/thumb -scaleto=100 &"% self.ImageViewerPath)
+
RESPONSE.redirect('manage_main')
def ImportFiles(self,RESPONSE=None):
@@ -510,22 +667,31 @@ class ImageCollection(Folder, Persistent
def showRuler(self,selected=None):
"""show ruler"""
showall =self.REQUEST.SESSION.get('showall','no')
+ ids=self.show_thumbs()
+ if len(ids)==0:
+ return "No entries"
+
if showall=='no':
ids=self.show_thumbs()
colRows=self.getColTimesRow()
num=int(len(ids)/(colRows[0]*colRows[1]))
+ if not (operator.mod(len(ids),colRows[0]*colRows[1])==0):
+ num+=1
a=colRows[0]*colRows[1]
- if num/a+1>1:
+ #print num,num+1
+ if num>1:
ret="Show thumbnail group no:"
- for i in range(num/a+1):
+ for i in range(num):
+ if (operator.mod(i,10)==0) and i>0:
+ ret +="
" #alle 10 linebreak einfuegen
k=i*a
if selected:
href=self.REQUEST['URL1']+"/selection?filename="+ids[k]
else:
- href=self.REQUEST['URL1']+"?filename="+ids[k]
+ href=self.REQUEST['URL1']+"?filename="+ids[int(k)]
- ret+="""%i """%(href,i)
+ ret+="""%i """%(href,i)
else:
ret=""
@@ -604,7 +770,8 @@ class ImageCollection(Folder, Persistent
"""Ausgabe anzahl"""
idsAll=self.show_thumbs()
-
+ if len(idsAll)==0: #keine Einträge
+ return 0
if self.REQUEST.SESSION.has_key("filename"):
filename=self.REQUEST.SESSION["filename"]
@@ -708,7 +875,12 @@ class ImageCollection(Folder, Persistent
self.REQUEST.SESSION['filename']=filen
- self.REQUEST.SESSION['showall']=self.REQUEST.get('showall','no')
+ if self.REQUEST.has_key('showall'):
+
+ self.REQUEST.SESSION['showall']=self.REQUEST.get('showall')
+ else:
+ self.REQUEST.SESSION['showall']=self.REQUEST.SESSION.get('showall','no')
+
pt=PageTemplateFile('Products/ImageArchive/zpt/overview.zpt').__of__(self)
return pt()