File:  [Repository] / ImageArchive / ImageArchive.py
Revision 1.5: download - view: text, annotated - select for diffs - revision graph
Fri Dec 5 13:32:29 2003 UTC (20 years, 6 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD

minor bugs in xmlinput

    1: from OFS.Folder import Folder
    2: from OFS.SimpleItem import SimpleItem
    3: from Globals import Persistent
    4: from Acquisition import Implicit
    5: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
    6: from Products.PageTemplates.PageTemplate import PageTemplate
    7: import re
    8: import os
    9: import os.path
   10: import urllib
   11: import xml.dom.minidom
   12: 
   13: def getText(nodelist):
   14:     
   15:     rc = ""
   16:     for node in nodelist:
   17:     
   18:     	if node.nodeType == node.TEXT_NODE:
   19:            rc = rc + node.data
   20:     return rc
   21: 
   22: 
   23: class ImageDigilib(SimpleItem,Persistent,Implicit):
   24:     """Anzeige object fuer digilib"""
   25:     meta_type="ImageDigilib"
   26: 
   27:     def __init__(self,id,filename,meta=None):
   28:         self.id=id
   29:         self.title=filename
   30:         self.filename=filename
   31:         self.meta=meta
   32: 
   33:     def getMeta(self):
   34:         """ausgabe der metadaten"""
   35:         return self.meta
   36:     
   37:     def uploadImage(self,fileupload,path_name):
   38:         """upload an Image from an Requast"""
   39:         #path_name=self.ImageStoragePath
   40:         filename=path_name+"/"+fileupload.filename
   41:         filedata=fileupload.read()
   42:         f=open(filename,"w")
   43:         f.write(filedata)
   44:         f.close()
   45:         os.chmod(filename,0644)
   46:         os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageStoragePath)
   47: 
   48: 
   49:     
   50:         
   51:     def download(self):
   52:         """download"""
   53:         path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&mo=rawfile,highres"
   54:         #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
   55:         #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
   56:         return self.REQUEST.RESPONSE.redirect(path)
   57:     
   58:     def thumb(self):
   59:         """show thumb"""
   60:         thumbname=os.path.splitext(self.filename)[0]+".jpg"
   61:         ## if not os.path.exists("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname):
   62: ##             image=urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:18080/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=150&mo=lores").read()
   63: ##             f=open("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname,"w")
   64: ##             f.write(image)
   65: ##             f.close()
   66: ##             os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 150 &"% self.ImageViewerPath)
   67:             
   68:         
   69:         path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=100&dh=100&mo=lores"
   70:         #path="/thumbs"+self.ImageViewerPath+"/"+thumbname
   71:         self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path
   72:         pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
   73:         return pt()
   74:     
   75:     def index_html(self):
   76:         """show image"""
   77:         path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/digilib.jsp?fn="+self.ImageViewerPath+"/"+self.filename
   78:         #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
   79:         #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
   80:         return self.REQUEST.RESPONSE.redirect(path)
   81: 
   82:     
   83: def manage_AddImageDigilibForm(self):
   84:     """Nothing yet"""
   85:     pt=PageTemplateFile('Products/ImageArchive/AddImageDigilibForm.zpt').__of__(self)
   86:     return pt()
   87:     
   88: def manage_AddImageDigilib(self,id,fileupload,meta=None,RESPONSE=None):
   89:     """Add ImageCollection"""
   90:     #fileupload=self.REQUEST['fileupload']
   91:     newObj=ImageDigilib(id,fileupload.filename,meta)
   92:     
   93:     self._setObject(id,newObj)
   94:     getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)
   95:     
   96:     if RESPONSE is not None:
   97:         RESPONSE.redirect('manage_main')
   98: 
   99:                  
  100: class ImageCollection(Folder, Persistent, Implicit):
  101:     """Sammelordner für Bilder"""
  102:     meta_type="ImageCollection"
  103:     
  104:     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
  105:     
  106:     def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString):
  107:         self.id=id
  108:         self.title=title
  109:         self.ImageStoragePath=ImageStoragePath
  110:         self.ImageViewerPath=ImageViewerPath
  111:         self.defaultMetaString=defaultMetaString
  112: 
  113:     manage_options = Folder.manage_options+(
  114:         {'label':'Main Config','action':'ImageCollection_config'},
  115:         {'label':'Import','action':'ImportFiles'},
  116:         {'label':'Recalculate Metadate','action':'recalculateMeta'},
  117: 
  118:         )
  119: 
  120: 
  121:     def meta_default(self,filename):
  122:         """url der metadaten"""
  123:         return self.defaultMetaString % filename
  124:                      
  125:     def getThumbAttribute(self,id,attr):
  126:         if hasattr(self,id):
  127:             return getattr(getattr(self,id),attr)
  128:         else:
  129:             if attr=='title':
  130:                 return "<b>Missing Image:%s</b>" % id
  131: 
  132:     def getThumbFunction(self,id,attr):
  133:         #return "DUMP"
  134:         if hasattr(self,id):
  135:             return getattr(getattr(self,id),attr)()
  136:         
  137:             
  138:     def xmlinput(self,url):
  139:         """Anzeige von ausgewaehlten thumbs"""
  140:         #return url
  141:         
  142:         url=urllib.unquote(url)
  143:         xmldoc=urllib.urlopen(url).read()
  144:         #print url
  145:         dom=xml.dom.minidom.parseString(xmldoc)
  146:         
  147:         images=dom.getElementsByTagName('imagename')
  148:         rc=[]
  149:         for image in images:
  150:             text=getText(image.childNodes)
  151:             if not text=="":
  152:                 rc.append(str(text))
  153:         rc.sort()
  154:         self.REQUEST.SESSION['filenames']=rc
  155:         pt=PageTemplateFile('Products/ImageArchive/overview_selected.zpt').__of__(self)
  156:         return pt()        
  157: 
  158:     def recalculateMeta(self):
  159:         """recalculate the metadata"""
  160:         
  161:         for entryid in self.__dict__:
  162:             entry=getattr(self,entryid)
  163:             if hasattr(entry,'meta_type'):
  164:                 
  165:                 if entry.meta_type=="ImageDigilib":
  166:                     entry.meta=entry.meta_default(entry.getId())
  167:         return "OK"
  168:     
  169:     def addImage(self):
  170:         """Add an Image"""
  171:         pt=PageTemplateFile('Products/ImageArchive/addImage.zpt').__of__(self)
  172:         return pt()
  173:     
  174:     def addImage2(self,fileupload,meta,use_default,RESPONSE=None):
  175:         """Add"""
  176:         #print "FU",fileupload
  177: 
  178:         if use_default:
  179:             try:
  180:                 meta=self.meta_default(fileupload.filename)
  181:             except:
  182:                 meta=None
  183:                 
  184:         manage_AddImageDigilib(self,fileupload.filename,fileupload,meta=meta)
  185:         return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fileupload.filename)
  186:         #return  self.REQUEST['URL1']+'/'+fileupload.filename
  187: 
  188:     def ImportFiles2(self,RESPONSE=None):
  189:         """Import the existing files of a folder"""
  190:         files=os.listdir(self.ImageStoragePath)
  191:         ret=""
  192:         #print self.__dict__
  193:         for file in files:
  194:             if not file[0]==".":
  195:                 if self.__dict__.has_key(file):
  196: 
  197:                     ret=ret+"<br>"+file+" already exists!"
  198:                 else:
  199:                     ret=ret+"<br>"+file+" created!"
  200:                     meta=self.meta_default(file)
  201:                     newObj=ImageDigilib(file,file,meta)
  202:                     #print newObj,file
  203:                     #print newObj
  204:                     self._setObject(file,newObj)
  205:         #print ret
  206:         #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
  207:         #print self.ImageStoragePath
  208:         os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageStoragePath)
  209:         RESPONSE.redirect('manage_main')
  210:     
  211:     def ImportFiles(self,RESPONSE=None):
  212:         """Import the existing files of a folder"""
  213:         files=os.listdir(self.ImageStoragePath)
  214:         ret=""
  215:         #print self.__dict__
  216:         for file in files:
  217:             if not file[0]==".":
  218:                 if self.__dict__.has_key(file):
  219: 
  220:                     ret=ret+"<br>"+file+" already exists!"
  221:                 else:
  222:                     ret=ret+"<br>"+file+" created!"
  223:                     newObj=ImageDigilib(file,file)
  224:                     #print newObj,file
  225:                     #print newObj
  226:                     try:
  227:                         self._setObject(file,newObj)
  228:                     except:
  229:                         """nothing yet"""
  230:         #print ret
  231:         #pt=PageTemplateFile('Products/ImageArchive/out.zpt').__of__(self)
  232:         #print self.ImageStoragePath
  233:         print os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 100 &"% self.ImageStoragePath)
  234:         RESPONSE.redirect('manage_main')
  235:         
  236:     def ImageCollection_config(self):
  237:         """Nothing yet"""
  238:         if not hasattr(self,'defaultMetaString'):
  239:             self.defaultMetaString=""
  240:             
  241:         pt=PageTemplateFile('Products/ImageArchive/ChangeImageCollectionForm.zpt').__of__(self)
  242:         return pt()
  243: 
  244:     def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
  245:         """Change"""
  246:         self.title=title
  247:         self.ImageStoragePath=ImageStoragePath
  248:         self.ImageViewerPath=ImageViewerPath
  249:         self.defaultMetaString=defaultMetaString
  250:         
  251:         if RESPONSE is not None:
  252:             RESPONSE.redirect('manage_main')
  253: 
  254:     def show_selected_thumbs(self):
  255:         #ids=[]
  256:         
  257:         return self.REQUEST.SESSION['filenames']
  258: 
  259:     def show_thumbs(self):
  260:         ids=[]
  261:         for entry in self.__dict__:
  262:             #print entry
  263:             if hasattr(getattr(self,entry),'thumb'):
  264:                 ids.append(entry)
  265:                 
  266:         #print ids
  267:         ids.sort()
  268:         return ids
  269: 
  270:     def show_thumbs_selected_rows(self,numberOfColumns):
  271:         """Ausgabe anzahl"""
  272:         ids=self.show_selected_thumbs()
  273:         self.REQUEST.SESSION['ids']=ids
  274:         number=int(len(ids)/numberOfColumns)+1
  275:         self.REQUEST.SESSION['number']=range(number)
  276:         return range(number+1)
  277: 
  278:     def show_thumbs_rows(self,numberOfColumns):
  279:         """Ausgabe anzahl"""
  280:         ids=self.show_thumbs()
  281:         self.REQUEST.SESSION['ids']=ids
  282:         number=int(len(ids)/numberOfColumns)+1
  283:         
  284:         return range(number+1)
  285: 
  286:     def show_thumbs_columns(self,row,numberOfColumns):
  287:         """Ausgabe einer Liste der Reihe"""
  288:         ids=self.REQUEST.SESSION['ids']
  289:         max=len(ids)
  290:         if (row*numberOfColumns)<max:
  291:             return ids[(row-1)*numberOfColumns:row*numberOfColumns]
  292:         else:
  293:             return ids[(row-1)*numberOfColumns:]
  294:     def thumblistSelected_old(self):
  295:         """main template collection"""
  296:         pt=PageTemplateFile('Products/ImageArchive/thumbselected.zpt').__of__(self)
  297:         return pt()
  298: 
  299:     def thumblistSelected(self):
  300:         """main template collection"""
  301:         pt=PageTemplateFile('Products/ImageArchive/thumbselected2.zpt').__of__(self)
  302:         return pt()
  303:     
  304:     def thumblist_old(self):
  305:         """main template collection"""
  306:         pt=PageTemplateFile('Products/ImageArchive/thumbs.zpt').__of__(self)
  307:         return pt()
  308: 
  309:     def thumblist(self):
  310:         """main template collection"""
  311:         pt=PageTemplateFile('Products/ImageArchive/thumb2.zpt').__of__(self)
  312:         return pt()
  313: 
  314:     def navig_html(self):
  315:         """navigation"""
  316:         pt=PageTemplateFile('Products/ImageArchive/navigation.zpt').__of__(self)
  317:         return pt()
  318: 
  319: 
  320:     def index_html(self):
  321:         """main template collection"""
  322:         if self.REQUEST.has_key('filename'):
  323:             filen=self.REQUEST['filename']
  324:         else:
  325:             filen=""
  326:         self.REQUEST.SESSION['filename']=filen
  327:         pt=PageTemplateFile('Products/ImageArchive/overview.zpt').__of__(self)
  328:         return pt()
  329:     
  330: def manage_AddImageCollectionForm(self):
  331:     """Nothing yet"""
  332:     pt=PageTemplateFile('Products/ImageArchive/AddImageCollectionForm.zpt').__of__(self)
  333:     return pt()
  334:     
  335: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
  336:     """Add ImageCollection"""
  337:     newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
  338:     self._setObject(id,newObj)
  339:     
  340:     if RESPONSE is not None:
  341:         RESPONSE.redirect('manage_main')
  342: 
  343: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>