--- 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+="
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="""
+
%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"""