--- ImageArchive/ImageArchive.py 2004/10/13 14:07:19 1.30 +++ ImageArchive/ImageArchive.py 2004/11/17 10:34:20 1.35 @@ -10,6 +10,8 @@ import os.path import urllib import xml.dom.minidom import operator +import tempfile +import shutil def splitPath(str): str2=str.replace("\\","/") @@ -83,19 +85,38 @@ class ImageDigilib(Folder,Persistent,Imp os.chmod(filename,0644) except: """hack""" + #scale thumb + + self.scaleThumbs() - os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageViewerPath) + #scale standard - + self.scaleWorkingVersions() + + def downloadWorkingVersion(self): + """download working version (2000 pixel)""" + + return self.download(fmt="&dw=2000&dh=2000",suffix=".jpg") - - def download(self): + def download(self,fmt="&mo=rawfile,hires",suffix=None): """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) + path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+fmt + + 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 + + if suffix: + filename=os.path.splitext(filename)[0]+suffix + + 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""" @@ -109,7 +130,7 @@ class ImageDigilib(Folder,Persistent,Imp #DEVEL:take nausikaa for server solution - path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=100&dh=100&mo=lores" + path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+"&dw=100&dh=100&mo=lores" #path="/mpiwg/online/"+self.ImageViewerPath+"/"+thumbname self.REQUEST.SESSION['string']=""% path pt=PageTemplateFile('Products/ImageArchive/zpt/thumb.zpt').__of__(self) @@ -156,10 +177,177 @@ 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,version="working"): + """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 am creating the download archive

") + RESPONSE.write("

1. step: getting the images

") + + if not self.REQUEST.SESSION.has_key('filenames'): + RESPONSE.write("

ERROR

") + 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: + if version=="working": + sourcePath="/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+id[0] + else: + sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+id[0] + targetPath=tmpPath+"/"+filename + try: + shutil.copyfile(sourcePath,targetPath) + except: + if RESPONSE: + RESPONSE.write(str("

Error in File: %s (possible missing)
\n"%filename)) + else: + """nothing""" + else: + if version=="working": + path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&dh=2000&dw=2000" + else: + path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[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 + try: + shutil.copyfile(sourcePath,targetPath) + except: + if RESPONSE: + RESPONSE.write(str("

Error in File: %s (missing?)
\n"%filename)) + else: + """nothing""" + else: + path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(ids[nr+i])[0]+"&mo=rawfile,hires" + + image=urllib.urlopen(path).read() + + + fh=file(tmpPath+"/"+filename,"w") + fh.write(image) + fh.close() + + if RESPONSE: + RESPONSE.write("

2. step: creating the downloadable file

") + 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("""

Click here for download ( %i Byte)

\n"""%(tmpFn,len)) + 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) + + #scale thumbs + ret=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) + if RESPONSE: + RESPONSE.write(ret.read()) + RESPONSE.write("\n") + return "RESCALING STARTED" + + def scaleWorkingVersions(self,RESPONSE=None): + """scale working versions""" + + #scale standard + + ret=os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ -dir=%s -dest=/mpiwg/temp/online/scaled/small -scaleto=2000 &"% self.ImageViewerPath) + if RESPONSE: + RESPONSE.write(ret.read()) + RESPONSE.write("\n") + return "rescaling started" + + def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString): self.id=id @@ -174,6 +362,7 @@ class ImageCollection(Folder, Persistent {'label':'Recalculate Metadata','action':'recalculateMeta'}, {'label':'Import Metadata','action':'importMetaForm'}, {'label':'Rescale thumbs','action':'scaleThumbs'}, + {'label':'Rescale working version','action':'scaleWorkingVersions'}, {'label':'Weight (ECHO)','action':'weightForm'}, ) @@ -229,7 +418,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() @@ -237,14 +426,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: @@ -300,16 +493,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() @@ -366,7 +575,16 @@ 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) + + #scale thumb + + self.scaleThumbs() + + #scale standard + + self.scaleWorkingVersions() + + RESPONSE.redirect('manage_main') def ImportFiles(self,RESPONSE=None): @@ -391,8 +609,17 @@ 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) - RESPONSE.redirect('manage_main') + + #scale thumb + + self.scaleThumbs() + + #scale standard + + self.scaleWorkingVersions() + + if RESPONSE: + RESPONSE.redirect('manage_main') def ImageCollection_config(self): """Nothing yet"""