--- ImageArchive/ImageArchive.py 2005/04/28 22:03:44 1.53 +++ ImageArchive/ImageArchive.py 2005/06/05 10:10:44 1.60 @@ -16,7 +16,12 @@ from types import * import time from threading import Thread import Queue - +try: + from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder +except: + print "ZSQL Extend Folder nicht importiert" + print "Metadatendfolder funktioniert nicht!!!" + try: from Products.ECHO_content.ECHO_collection import ECHO_basis except: @@ -27,6 +32,8 @@ except: manage_options=() +tdir = "/mpiwg/temp/tmp/archivesImageServer/" +#tdir="/tmp/archivesImageServer/" def splitPath(str): str2=str.replace("\\","/") @@ -52,7 +59,8 @@ def getTextFromNode(nodename): class generateSet: """generateSetThread""" - def __init__(self,filenames,filenamesIds,ImageViewerPath,ids,url,local=None,version="full"): + + def __init__(self,filenames,filenamesIds,ImageViewerPath,ids,url,local=None,version="working"): """init generateSet""" self.filenames=filenames self.filenamesIds=filenamesIds @@ -62,14 +70,16 @@ class generateSet: self.url=url self.version=version self.done=None + def __call__(self): """call generate Set""" storeTempDir=tempfile.tempdir - tempfile.tempdir="/tmp/archivesImageServer" + tempfile.tempdir=tdir + tmpPath=tempfile.mktemp() - tmpZip=tempfile.mktemp()+".zip" + tmpZip=tempfile.mktemp()+".gtz" tmpFn=os.path.split(tmpZip)[1] if not os.path.exists(tempfile.tempdir): @@ -93,7 +103,9 @@ class generateSet: self.response+=str("

Get File: %s
\n"%filename) if self.local: + if self.version=="working": + sourcePath="/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+os.path.splitext(id[0])[0]+".jpg" else: sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+id[0] @@ -104,9 +116,9 @@ class generateSet: self.response+=(str("

Error in File: %s (possible missing)
\n"%filename)) else: if self.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" + path=self.scalerPath+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" + path=self.scalerPath+self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&mo=rawfile,hires" image=urllib.urlopen(path).read() @@ -123,7 +135,7 @@ class generateSet: try: nr=self.ids.index(id[0]) except: - self.reponse+=str("

Error in File: %s (possible missing)
\n"%id[0]) + self.response+=str("

Error in File: %s (possible missing)
\n"%id[0]) nr=0 @@ -139,15 +151,16 @@ class generateSet: self.response+=str("

Get File: %s
\n"%filename) if self.local: - sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+self.ids[nr+1] + sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+self.ids[nr+i] targetPath=tmpPath+"/"+filename try: shutil.copyfile(sourcePath,targetPath) + except: self.response+=str("

Error in File: %s (missing?)
\n"%filename) else: - path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(ids[nr+i])[0]+"&mo=rawfile,hires" + path=self.scalerPath+self.ImageViewerPath+"/"+os.path.splitext(ids[nr+i])[0]+"&mo=rawfile,hires" image=urllib.urlopen(path).read() @@ -157,10 +170,10 @@ class generateSet: fh.close() self.response+="

2. step: creating the downloadable file

" - self.response+="

Create Zip
" + self.response+="

Create gtar
" self.response+="

This can take a while....
\n" - fh=os.popen2("zip -u %s %s/*"%(tmpZip,tmpPath),1)[1] + fh=os.popen2("gnutar zcvf %s %s/*"%(tmpZip,tmpPath),1)[1] self.response+="
" for c in fh.read(): self.response+=c @@ -324,7 +337,7 @@ class ImageDigilib(Folder,Persistent,Imp def download(self,fmt="&mo=rawfile,hires",suffix=None): """download""" - path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+fmt + path=self.scalerPath+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 @@ -455,24 +468,38 @@ class ImageDigilib(Folder,Persistent,Imp def thumb(self,url=None): """show thumb""" thumbname=os.path.splitext(self.filename)[0]+".jpg" - ## if not os.path.exists("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname): -## image=urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:18080/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=150&mo=lores").read() -## f=open("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname,"w") -## f.write(image) -## f.close() -## os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 150 &"% self.ImageViewerPath) - - #DEVEL:take nausikaa for server solution - - 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 + + path=self.scalerPath+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+"&dw=100&dh=100&mo=lores" + self.REQUEST.SESSION['string']=""% path if url: return ""% path else: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumb.zpt')).__of__(self) return pt() + + + def thumbMD(self,url=None): + """show thumb mit Metadaten erwarten image in ImageCollectionMD + """ + thumbname=os.path.splitext(self.filename)[0]+".jpg" + + path=self.scalerPath+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+"&dw=100&dh=100&mo=lores" + self.REQUEST.SESSION['string']=""% path + if url: + return ""% path + else: + + overview=self.ZopeFind(self.aq_parent,obj_ids=['thumb.html']) + if overview: + return getattr(self,overview[0][0])() + else: + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbMD.zpt')).__of__(self) + return pt() + + + def index_html(self): """show image""" #DEVELOP: take first one for server @@ -506,8 +533,12 @@ class ImageCollection(Folder, Persistent """Sammelordner für Bilder""" meta_type="ImageCollection" - + scalerPath="http://127.0.0.1:18080/digitallibrary/servlet/Scaler/?fn=" + #scalerPath="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn=" + zipThreads={} + zipThreads2={} + genericMetaDataType="leiden_meta" leiden_meta_fields=['image_id','date','country','place','people','description','photographer'] @@ -535,11 +566,12 @@ class ImageCollection(Folder, Persistent self.zipThreads[thread.getName()[0:]]=threadStart + self.zipThreads2[thread.getName()[0:]]=thread self.REQUEST.SESSION['threadName']=thread.getName()[0:] wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['zip_wait_template']) if wait_template: return wait_template[0][1]() - pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_Wait.zpt')).__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait.zpt')).__of__(self) return pt() #xmltrans.run() else: @@ -551,30 +583,47 @@ class ImageCollection(Folder, Persistent if wait_template: return wait_template[0][1]() - pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_Wait.zpt')).__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait.zpt')).__of__(self) return pt() else: if self.zipThreads[threadName].isDone(): self.REQUEST.SESSION['result']=self.zipThreads[threadName].getResult() + self.zipThreads2[threadName].join() + del(self.zipThreads2[threadName]) + del(self.zipThreads[threadName]) pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_result.zpt')).__of__(self) return pt() else: self.REQUEST.SESSION['result']=self.zipThreads[threadName].getResult() self.REQUEST.SESSION['threadName']=threadName - pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_Wait_result.zpt')).__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait_result.zpt')).__of__(self) return pt() + + def checkThreads(self): + """teste running threads""" + ret=""" + +

Threads of %s

"""%(self.absolute_url(),self.getId()) + + for threadName in self.zipThreads.keys(): + if self.zipThreads2[threadName].isAlive(): + ret+="

%s --> alive

"%threadName + else: + ret+="

%s --> dead

"%threadName + return ret+"" - def downloadSet(self,fn): """download prepared set""" - filename="/tmp/archivesImageServer/"+fn + filename=os.path.join(tdir,fn) + - self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%"image.zip") + self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%"image.tgz") self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") len=os.stat(filename)[6] self.REQUEST.RESPONSE.setHeader("Content-Length",len) @@ -858,14 +907,14 @@ class ImageCollection(Folder, Persistent RESPONSE.redirect('manage_main') - def importStructure(self,path): - """import""" - splitted=os.path.split(path) - if os.path.isDir(path) and (len(splitted[1])>0) and (splitted[1][0]=="."): - manage_AddImageCollection(self,splitted[1],splitted[1],path,self.ImageViewerPath,self.defaultMetaString,RESPONSE=None) + ## def importStructure(self,path): +## """import""" +## splitted=os.path.split(path) +## if os.path.isDir(path) and (len(splitted[1])>0) and (splitted[1][0]=="."): +## manage_AddImageCollection(self,splitted[1],splitted[1],path,self.ImageViewerPath,self.defaultMetaString,RESPONSE=None) - obj=getattr(self,splitted[1]) - obj.ImportFiles() +## obj=getattr(self,splitted[1]) +## obj.ImportFiles() def ImportStructure(self,RESPONSE=None): """Import the existing files of a folder""" @@ -1355,8 +1404,26 @@ class ImageCollection(Folder, Persistent return filename else: return fn - def index_html(self): + def index_html(self,fn=None): """main template collection""" + + if fn: + ret=[] + + if type(fn) is ListType: + """experimentell mehr als ein filename""" + for filename in fn: + if not (filename == ""): + ret.append((filename,'',1)) + else: + ret.append((fn,'',1)) + + self.REQUEST.SESSION['filenames']=ret + #self.REQUEST.SESSION['filenamesIds']=fnIds + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self) + return pt() + if self.REQUEST.has_key('filename'): filen=self.REQUEST['filename'] else: @@ -1370,9 +1437,13 @@ class ImageCollection(Folder, Persistent else: self.REQUEST.SESSION['showall']=self.REQUEST.SESSION.get('showall','no') - - pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview.zpt')).__of__(self) - return pt() + + overview=self.ZopeFind(self,obj_ids=['overview.html']) + if overview: + return overview[0][1]() + else: + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview.zpt')).__of__(self) + return pt() def manage_AddImageCollectionForm(self): """Nothing yet""" @@ -1388,6 +1459,49 @@ def manage_AddImageCollection(self,id,ti RESPONSE.redirect('manage_main') + +class ImageCollectionMD(ImageCollection,ZSQLExtendFolder): + """Imageviewer and Metadata""" + meta_type="ImageCollection MD" + scalerPath="http://127.0.0.1:18080/digitallibrary/servlet/Scaler/?fn=" + #scalerPath="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn=" + manage_options=ImageCollection.manage_options+( + {'label':'ZSQLExtend','action':'changeZSQLExtendForm'}, + ) + + changeZSQLExtendForm=ZSQLExtendFolder.changeZSQLExtendForm + + def setGenericSearchStringForm(self): + """form setze generischen search string fuer MD""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','setGenericSearchStringForm.zpt')).__of__(self) + return pt() + + def setGenericSearchString(self,searchString): + """setze generischen search string""" + self.searchString=searchString + + def thumblistMD(self): + """main template collection""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbListMD.zpt')).__of__(self) + return pt() + + +def manage_AddImageCollectionMDForm(self): + """Nothing yet""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionFormMD.zpt')).__of__(self) + return pt() + +def manage_AddImageCollectionMD(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None): + """Add ImageCollection""" + newObj=ImageCollectionMD(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString) + self._setObject(id,newObj) + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + + + class ImageCollectionIFrame(ImageCollection): """Class fuer Collection set als IFrame"""