--- ImageArchive/ImageArchive.py 2004/12/21 17:22:22 1.41
+++ ImageArchive/ImageArchive.py 2005/03/18 16:57:21 1.49
@@ -13,7 +13,7 @@ import operator
import tempfile
import shutil
from types import *
-
+import time
try:
from Products.ECHO_content.ECHO_collection import ECHO_basis
@@ -21,6 +21,7 @@ except:
print "ECHO Elements not imported"
class ECHO_basis:
"""leer"""
+
manage_options=()
@@ -38,7 +39,53 @@ def getText(nodelist):
rc = rc + node.data
return rc
+def getTextFromNode(nodename):
+ nodelist=nodename.childNodes
+ rc = ""
+ for node in nodelist:
+ if node.nodeType == node.TEXT_NODE:
+ rc = rc + node.data
+ return rc
+
+class metaData(SimpleItem):
+ """Klasse fuer metadaten"""
+ meta_type="metaData"
+
+ def __init__(self,xmlurl,container=None):
+ """__init__"""
+ return self.update(xmlurl,container)
+
+
+ def update(self,xmlurl,container=None):
+ """update"""
+ try:
+ xmlfh=urllib.urlopen(xmlurl)
+ dom=xml.dom.minidom.parse(xmlfh)
+ except:
+ return None
+
+ md=dom.getElementsByTagName(container)
+ mlist=[]
+ if md:
+ for node in md[0].childNodes:
+ if node.nodeType==dom.ELEMENT_NODE:
+ name=node.tagName
+ content=getTextFromNode(node)
+ setattr(self,name,content)
+ mlist.append(name)
+ self.mlist=mlist[0:]
+ else:
+ self.mlist=[]
+
+ def index_html(self):
+ """index"""
+ ret="
"
+ for tag in self.mlist:
+ ret+="%s=%s
"%(tag,getattr(self,tag))
+ return ret+""
+
+
class ImageDigilib(Folder,Persistent,Implicit):
"""Anzeige object fuer digilib"""
meta_type="ImageDigilib"
@@ -83,7 +130,26 @@ class ImageDigilib(Folder,Persistent,Imp
def getMeta(self):
"""ausgabe der metadaten"""
return self.meta
-
+
+ def manageMetaData(self,strict=None):
+ """create or updateMetadata"""
+
+ md=self.ZopeFind(self,obj_metatypes=["metaData"])
+
+ if not md:
+ self._setObject("metaData",metaData(self.meta,"ROW"))
+
+ else:
+ if not strict:
+ md[0][1].update(self.meta,"ROW")
+ else:
+ print "strict"
+ if len(md[0][1].mlist)==0:
+ print " +++",self.getId()
+ md[0][1].update(self.meta,"ROW")
+ else:
+ print " ---",self.getId()
+
def uploadImage(self,fileupload,path_name):
"""upload an Image from an Requast"""
#path_name=self.ImageStoragePath
@@ -126,8 +192,10 @@ class ImageDigilib(Folder,Persistent,Imp
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)
+ #print path
+ imagefh=urllib.urlopen(path,'rb')
+
+ self.REQUEST.RESPONSE.write(imagefh.read())
self.REQUEST.RESPONSE.close()
#return self.REQUEST.RESPONSE.redirect(path)
@@ -136,12 +204,68 @@ class ImageDigilib(Folder,Persistent,Imp
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','upDateImageForm.zpt')).__of__(self)
return pt()
- def updateImage(self,file,RESPONSE):
+ def renameImageForm(self):
+ """form"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','renameImageForm.zpt')).__of__(self)
+ return pt()
+
+ def renameImage(self,newname,RESPONSE=None):
+ """umbenennen"""
+ #umbennen des files im folder
+ oldname=self.getId()
+ self.aq_parent.manage_renameObjects(ids=[oldname],new_ids=[newname])
+ self.title=newname[0:]
+ self.filename=newname[0:]
+ #umbennen des files auf dem server
+ oldpath=os.path.join(self.ImageStoragePath,oldname)
+ newpath=os.path.join(self.ImageStoragePath,newname)
+ os.rename(oldpath,newpath)
+
+ #umbenennen des versionsfolders
+ oldfolder=os.path.join(self.ImageStoragePath,"."+oldname+".dir")
+ newfolder=os.path.join(self.ImageStoragePath,"."+newname+".dir")
+ if os.path.exists(oldfolder):
+ os.rename(oldfolder,newfolder)
+ else:
+ os.mkdir(newfolder)
+
+ #schreibe info uber umbennenung
+
+ renameName=os.path.join(newfolder,"renamed")
+ if os.path.exists(renameName):
+ fh=file(renameName,'a')
+ else:
+ fh=file(renameName,'w')
+
+ tm=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
+ try:
+ user=self.REQUEST['AUTHENTICATED_USER']
+ except:
+ user="unknown"
+
+ str="""%s %s %s %s\n"""%(tm,user,oldname,newname)
+ fh.write(str)
+ fh.close()
+
+ #scale thumb
+
+ self.scaleThumbs()
+
+ #scale standard
+
+ self.scaleWorkingVersions()
+
+
+ if RESPONSE:
+ RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
+
+
+ def updateImage(self,file,rename=None,RESPONSE=None):
"""lade neues Version des Bildes"""
#teste ob Dokumenten ordner schon vorhanden
imagePath=os.path.join(self.ImageStoragePath,self.getId())
path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")
- print "path",path
+
if not os.path.exists(path):
os.mkdir(path,0775)
os.chmod(path,0775)
@@ -174,12 +298,17 @@ class ImageDigilib(Folder,Persistent,Imp
self.scaleWorkingVersions()
+ if rename:
+ self.renameImage(file.filename)
+
+
if RESPONSE:
- RESPONSE.redirect(self.absolute_url())
+ RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
+
return "done"
- def thumb(self):
+ 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):
@@ -194,8 +323,11 @@ class ImageDigilib(Folder,Persistent,Imp
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(os.path.join(package_home(globals()),'zpt','thumb.zpt')).__of__(self)
- return pt()
+ if url:
+ return "
"% path
+ else:
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumb.zpt')).__of__(self)
+ return pt()
def index_html(self):
"""show image"""
@@ -243,6 +375,7 @@ class ImageCollection(Folder, Persistent
def createSet(self,RESPONSE=None,local=None,version="working"):
"""download aller gewaehlten files"""
+ storeTempDir=tempfile.tempdir
tempfile.tempdir="/tmp/archivesImageServer"
tmpPath=tempfile.mktemp()
@@ -431,20 +564,30 @@ class ImageCollection(Folder, Persistent
manage_options = optTMP+(
{'label':'Main Config','action':'ImageCollection_config'},
{'label':'Import','action':'ImportFiles'},
- {'label':'Recalculate Metadata','action':'recalculateMeta'},
- {'label':'Import Metadata','action':'importMetaForm'},
+ {'label':'Recalculate MetadataLink','action':'recalculateMetaLink'},
+ {'label':'Import Metadata File','action':'importMetaFileForm'},
+ {'label':'Import Metadata','action':'importMetaData'},
{'label':'Rescale thumbs','action':'scaleThumbs'},
{'label':'Rescale working version','action':'scaleWorkingVersions'},
)
+
+ def importMetaData(self,strict=None):
+ """import metadata, if strict ist not None then only metadata will be rebuild where metadata is empty"""
- def importMetaForm(self):
+ for image in self.ZopeFind(self,obj_metatypes=["ImageDigilib"]):
+ print image[1].getId()
+ image[1].manageMetaData(strict)
+ return "ok"
+
+
+ def importMetaFileForm(self):
"""import metadata"""
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','importMeta.zpt')).__of__(self)
return pt()
- def importMeta(self,fileupload,tag):
+ def importMetaFile(self,fileupload,tag):
"""import"""
filedata=fileupload.read()
dom=xml.dom.minidom.parseString(filedata)
@@ -531,7 +674,7 @@ class ImageCollection(Folder, Persistent
def meta_default(self,filename):
"""url der metadaten"""
- return self.defaultMetaString % filename
+ return self.defaultMetaString % urllib.quote(filename)
def getThumbAttribute(self,id,attr):
if hasattr(self,id):
@@ -592,7 +735,7 @@ class ImageCollection(Folder, Persistent
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
return pt()
- def recalculateMeta(self):
+ def recalculateMetaLink(self):
"""recalculate the metadata"""
for entryid in self.__dict__:
@@ -713,9 +856,10 @@ class ImageCollection(Folder, Persistent
def show_selected_thumbs(self):
#ids=[]
-
- return self.REQUEST.SESSION['filenames']
-
+ try:
+ return self.REQUEST.SESSION['filenames']
+ except:
+ return None
def show_thumbs(self):
ids=[]
for entry in self.__dict__:
@@ -822,6 +966,7 @@ class ImageCollection(Folder, Persistent
return "No entries"
if showall=='no':
+ actualNr=0
ids=self.show_thumbs()
colRows=self.getColTimesRow()
num=int(len(ids)/(colRows[0]*colRows[1]))
@@ -829,19 +974,63 @@ class ImageCollection(Folder, Persistent
num+=1
a=colRows[0]*colRows[1]
#print num,num+1
+
if num>1:
- ret="Show thumbnail group no:"
- 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[int(k)]
+ ret=""
+ if selected:
+ ret+="""