--- ImageArchive/ImageArchive.py 2004/10/13 13:39:59 1.29
+++ ImageArchive/ImageArchive.py 2004/11/12 10:59:26 1.33
@@ -10,6 +10,12 @@ 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):
@@ -69,7 +75,7 @@ class ImageDigilib(Folder,Persistent,Imp
def uploadImage(self,fileupload,path_name):
"""upload an Image from an Requast"""
#path_name=self.ImageStoragePath
- fn=os.path.split(fileupload.filename)[1]
+ fn=splitPath(fileupload.filename)
filename=path_name+"/"+fn
filedata=fileupload.read()
f=open(filename,"w")
@@ -84,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"""
@@ -131,7 +144,7 @@ def manage_AddImageDigilibForm(self):
def manage_AddImageDigilib(self,id,fileupload,meta=None,RESPONSE=None):
"""Add ImageCollection"""
#fileupload=self.REQUEST['fileupload']
- fn=os.path.split(fileupload.filename)[1]
+ fn=splitPath(fileupload.filename)
newObj=ImageDigilib(id,fn,meta)
self._setObject(id,newObj)
@@ -152,10 +165,145 @@ 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,local=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']: + + 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] + + if RESPONSE: + RESPONSE.write(str("
Get File: %s
\n"%filename))
+
+ if local:
+ sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+id[0]
+ targetPath=tmpPath+"/"+filename
+ shutil.copyfile(sourcePath,targetPath)
+
+ else:
+
+ 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()
+
+
+ fh=file(tmpPath+"/"+filename,"w")
+
+
+ fh.write(image)
+ fh.close()
+
+ #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
+ 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]
+
+ if RESPONSE:
+ RESPONSE.write(str("
Get File: %s
\n"%filename))
+
+ if local:
+ sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+ids[nr+1]
+ targetPath=tmpPath+"/"+filename
+ shutil.copyfile(sourcePath,targetPath)
+ else:
+ path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+ids[nr+i]+"&mo=rawfile,hires"
+
+ image=urllib.urlopen(path).read()
+
+
+ fh=file(tmpPath+"/"+filename,"w")
+ 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 @@ -225,7 +373,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() @@ -233,14 +381,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: @@ -296,16 +448,32 @@ 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] + nopT=getText(numberOfPages.childNodes) + try: + nop=int(nopT) + except: + nop=0 + 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() @@ -336,9 +504,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): @@ -361,7 +530,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):