--- ImageArchive/ImageArchive.py 2004/08/03 13:36:30 1.26 +++ ImageArchive/ImageArchive.py 2004/11/12 10:59:26 1.33 @@ -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,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 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: + 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("

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) - 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 +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() @@ -230,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: @@ -293,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() @@ -333,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): @@ -358,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): @@ -510,21 +683,29 @@ 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] #print num,num+1 - if num+1>1: + if num>1: ret="Show thumbnail group no:
" - for i in range(num+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) @@ -605,7 +786,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"]