Diff for /OSA_system2/OSAS_browser.py between versions 1.15 and 1.23

version 1.15, 2005/03/03 20:41:00 version 1.23, 2010/02/15 19:09:10
Line 8  from Products.PageTemplates.PageTemplate Line 8  from Products.PageTemplates.PageTemplate
 from OFS.Folder import Folder  from OFS.Folder import Folder
 from OFS.SimpleItem import SimpleItem  from OFS.SimpleItem import SimpleItem
 from Globals import InitializeClass,package_home  from Globals import InitializeClass,package_home
 import zLOG  
   import logging
   
   #ersetzt logging
   def logger(txt,method,txt2):
       """logging"""
       logging.info(txt+ txt2)
   
   
 import base64  import base64
 import bz2  import bz2
 import os  import os
 import os.path  import os.path
 import stat  import stat
   import Ft.Xml.XPath
 import xml.dom.minidom  import xml.dom.minidom
 from types import *  from types import *
 import xmlrpclib  import xmlrpclib
Line 24  def decodeRPC(string): Line 33  def decodeRPC(string):
   
   
 class OSAS_storeOnline(SimpleItem):  class OSAS_storeOnline(SimpleItem):
     """Webfrontend für das Storagesystem      """Webfrontend fuer das Storagesystem
     liefert Browserumgebung       liefert Browserumgebung 
     """      """
     meta_type="OSAS_StoreOnline__neu"      meta_type="OSAS_StoreOnline__neu"
Line 41  class OSAS_storeOnline(SimpleItem): Line 50  class OSAS_storeOnline(SimpleItem):
   
         objects=self.readObjectsFromPath(realPath)          objects=self.readObjectsFromPath(realPath)
   
           try:
         return objects[os.path.join(realPath,".")][0]          return objects[os.path.join(realPath,".")][0]
           except:
               return ""
       def getHandlersOfPath(self):
           """handler des actullen path"""
           path=self.REQUEST['path']
           objects=self.readObjectsFromPath(path)
           
           typeObject=objects.get(os.path.join(path,"."),None)
           if not typeObject:
               return("",[],"")
           type=typeObject[0]
   
           handler=self.giveHandlers(path,type)
   
           
           return (os.path.split(path)[1],handler,objects[os.path.join(path,".")][1],type)
   
           
     def getMetaFile(self,path):      def getMetaFile(self,path):
         """get index.meta and translate it to HTML"""          """get index.meta and translate it to HTML"""
Line 116  class OSAS_storeOnline(SimpleItem): Line 143  class OSAS_storeOnline(SimpleItem):
         @param path: Pfad auf das Object relativ zum rootFolderName          @param path: Pfad auf das Object relativ zum rootFolderName
         @return: metadata als html          @return: metadata als html
         """          """
         print "search for ",path  
         xmlInfos=self.findEntryInIndexMeta(path)          xmlInfos=self.findEntryInIndexMeta(path)
         print "RRRRRRRRRRRR",xmlInfos  
         if xmlInfos:          if xmlInfos:
             return OSAS_helpers.getMetaInfoFromXML(path,xmlInfos)              return OSAS_helpers.getMetaInfoFromXML(path,xmlInfos)
         else:          else:
Line 132  class OSAS_storeOnline(SimpleItem): Line 159  class OSAS_storeOnline(SimpleItem):
                   
         server=xmlrpclib.Server(self.serverUrl)          server=xmlrpclib.Server(self.serverUrl)
         indexMeta=server.findIndexMeta(path) # suche index.meta          indexMeta=server.findIndexMeta(path) # suche index.meta
         print "found indexMeta",indexMeta  
         if not indexMeta:          if not indexMeta:
             return None              return None
   
Line 140  class OSAS_storeOnline(SimpleItem): Line 167  class OSAS_storeOnline(SimpleItem):
         path=os.path.normpath(path)          path=os.path.normpath(path)
   
         try:          try:
               dom = NonvalidatingReader.parseString(server.getFile(indexMeta),"http://www.mpiwg-berlin.mpg.de/")
                           
             dom=xml.dom.minidom.parseString(server.getFile(indexMeta))  
         except:          except:
             zLOG.LOG("OSAS_browser (findEntryInIndexMeta)",zLOG.ERROR,"Cannot parse: %s"%indexMeta)              logger("OSAS_browser (findEntryInIndexMeta)",logging.ERROR,"Cannot parse: %s"%indexMeta)
             return None              return None
                 
         path=path.replace(realPath,'')          path=path.replace(realPath,'')
Line 155  class OSAS_storeOnline(SimpleItem): Line 182  class OSAS_storeOnline(SimpleItem):
                 searchPath=searchPath[1:]                  searchPath=searchPath[1:]
         #ist path ein directory?           #ist path ein directory? 
         xpath="/resource/dir[name='%s' and path='%s']"%(name,searchPath)          xpath="/resource/dir[name='%s' and path='%s']"%(name,searchPath)
           dirs=Ft.Xml.XPath.Evaluate(xpath,contextNode=dom)
   
         dirs=xml.xpath.Evaluate(xpath,dom)  
   
         if len(dirs)>0:          if len(dirs)>0:
             return dirs[0].toxml              return dirs[0].toxml
Line 164  class OSAS_storeOnline(SimpleItem): Line 191  class OSAS_storeOnline(SimpleItem):
         #ist path ein file?                #ist path ein file?      
         xpath="/resource/file[name='%s' and path='%s']"%(name,searchPath)          xpath="/resource/file[name='%s' and path='%s']"%(name,searchPath)
   
         dirs=xml.xpath.Evaluate(xpath,dom)  
   
           dirs=Ft.Xml.XPath.Evaluate(xpath,contextNode=dom)
         if len(dirs)>0:          if len(dirs)>0:
             return dirs[0].toxml()              return dirs[0].toxml()
                   
Line 180  class OSAS_storeOnline(SimpleItem): Line 207  class OSAS_storeOnline(SimpleItem):
         @todo: Rueckgabe einer Beschreibung gemaess Metadaten          @todo: Rueckgabe einer Beschreibung gemaess Metadaten
         """          """
         ret={}          ret={}
           startPath=path
         server=xmlrpclib.Server(self.serverUrl)          server=xmlrpclib.Server(self.serverUrl)
         indexMeta,stats=server.findIndexMetaWithStats(path)#findex index.meta zu path.          indexMeta,stats=server.findIndexMetaWithStats(path)#findex index.meta zu path.
         print "checking",path,indexMeta  
         if not indexMeta:          if not indexMeta:
             return ret              return ret
   
         realPath=os.path.split(indexMeta)[0]          realPath=os.path.split(indexMeta)[0]
         path=path.replace(realPath,"")          path=path.replace(realPath,"")
         if path and (path[0]==os.sep): #falls am Anfang os.sep steht lösche dieses.          if path and (path[0]==os.sep): #falls am Anfang os.sep steht loesche dieses.
             path=path[1:]              path=path[1:]
   
   
   
         #teste ob schon im cache          #teste ob schon im cache zur Zeit kein chache wenn index.meta file nicht im selben ordner wie path.
                   
         if self._v_metaFiles.has_key(path) and (self._v_metaFiles[path][0]==stats[stat.ST_MTIME]):          #if self._v_metaFiles.has_key(startPath) and (self._v_metaFiles[realPath][0]==stats[stat.ST_MTIME]) and (path==""):
             return self._v_metaFiles[path][1]          #
           #    return self._v_metaFiles[startPath][1]
   
         try:          try:
             dom=xml.dom.minidom.parseString(server.getFile(indexMeta))              dom=xml.dom.minidom.parseString(server.getFile(indexMeta))
         except:          except:
             zLOG.LOG("OSAS_browser (getSubDirsFromIndexMeta)",zLOG.ERROR,"Cannot parse: %s"%indexMeta)              logger("OSAS_browser (getSubDirsFromIndexMeta)",logging.ERROR,"Cannot parse: %s"%indexMeta)
             return ret              return ret
   
         dirs=[]          dirs=[]
Line 229  class OSAS_storeOnline(SimpleItem): Line 258  class OSAS_storeOnline(SimpleItem):
                 object=os.path.join(realPath,pathX,name)                  object=os.path.join(realPath,pathX,name)
                 ret[object.encode('utf-8')]=(fileType,'')                  ret[object.encode('utf-8')]=(fileType,'')
   
         self._v_metaFiles[path]=(stats[stat.ST_MTIME],ret) # speicher im chache          self._v_metaFiles[startPath]=(stats[stat.ST_MTIME],ret) # speicher im chache
               
         return ret          return ret
   
Line 277  class OSAS_storeOnline(SimpleItem): Line 306  class OSAS_storeOnline(SimpleItem):
         if metaDataId:          if metaDataId:
             metaData=getattr(self,metaDataId)              metaData=getattr(self,metaDataId)
             if not (getattr(metaData,'meta_type','')=='OSAS_Metadata__neu'):              if not (getattr(metaData,'meta_type','')=='OSAS_Metadata__neu'):
                 zLOG.LOG('OSAS_browser (readObjectsFromPath)',zLOG.ERROR,"%s is not OSAS_Metadata")                  logger('OSAS_browser (readObjectsFromPath)',logging.ERROR,"%s is not OSAS_Metadata")
                 metaData=None                  metaData=None
         else:          else:
             metaDatas=self.ZopeFind(self.aq_parent,obj_metatypes=['OSAS_Metadata__neu'],search_sub=1)              metaDatas=self.ZopeFind(self.aq_parent,obj_metatypes=['OSAS_Metadata__neu'],search_sub=1)
             if metaDatas:              if metaDatas:
                 metaData=metaDatas[0][1]                  metaData=metaDatas[0][1]
             else:              else:
                 zLOG.LOG('OSAS_browser (readObjectsFromPath)',zLOG.INFO,"There is no OSAS_Metadata Object")                  logger('OSAS_browser (readObjectsFromPath)',logging.INFO,"There is no OSAS_Metadata Object")
                 metaData=None                  metaData=None
                                   
         #print "md",metaData          #print "md",metaData
Line 309  class OSAS_storeOnline(SimpleItem): Line 338  class OSAS_storeOnline(SimpleItem):
                   
         ret={}          ret={}
         for filename in dir:          for filename in dir:
             print "doing",filename,indexMetas  
             object=os.path.join(realPath,filename)              object=os.path.join(realPath,filename)
             fileType=indexMetas[filename][0]              fileType=indexMetas[filename][0]
                           
             if fileType:              if fileType:
                 if (fileType=='OSAS_dir') and indexMetas.has_key(".") and indexMetas["."][1]:                  if (fileType=='OSAS_dir') and indexMetas.has_key(".") and indexMetas["."][1]:
                     print "TEEEEEEEEEE"  
                     if(OSAS_helpers.isImageFolder(object,decodeRPC(indexMetas["."][1]))):                      if(OSAS_helpers.isImageFolder(object,decodeRPC(indexMetas["."][1]))):
                         fileType='OSAS_imageFolder'                          fileType='OSAS_imageFolder'
                     elif(OSAS_helpers.isVideoFolder(object,decodeRPC(indexMetas["."][1]))):                      elif(OSAS_helpers.isVideoFolder(object,decodeRPC(indexMetas["."][1]))):
                         fileType='OSAS_videoFolder'                          fileType='OSAS_videoFolder'
                 if metaData and indexMetas[filename][1]:                  if metaData and indexMetas[filename][1]:
                     print "do",filename  
                     ret[object]=(fileType,metaData.getDisplayFieldsAsStr(decodeRPC(indexMetas[filename][1])))                      ret[object]=(fileType,metaData.getDisplayFieldsAsStr(decodeRPC(indexMetas[filename][1])))
                 else:                  else:
                     metaDataStr=self.findEntryInIndexMeta(object)                      metaDataStr=self.findEntryInIndexMeta(object)
                     print "MMMMMDDDDD",metaDataStr  
                     if metaDataStr:                      if metaDataStr:
                         display=metaData.getDisplayFieldsAsStr(metaDataStr)                          display=metaData.getDisplayFieldsAsStr(metaDataStr)
                         dom=xml.dom.minidom.parseString(metaDataStr)  
   
                         if len(xml.xpath.Evaluate("/file/meta/video-file",dom))>0:                          dom = NonvalidatingReader.parseString(metaDataStr,"http://www.mpiwg-berlin.mpg.de/")
                           if len(Ft.Xml.XPath.Evaluate("/file/meta/video-file",contextNode=dom))>0:
                             fileType='OSAS_videoFile'                              fileType='OSAS_videoFile'
                                                           
                     else:                      else:
                         display=""                          display=""
                     print object,fileType,display  
                                           
                     ret[object]=(fileType,display)                      ret[object]=(fileType,display)
                           
Line 374  class OSAS_storeOnline(SimpleItem): Line 403  class OSAS_storeOnline(SimpleItem):
          - (string) handler sind die Ergebnisse von giveHandlers fuer dieses Objekt           - (string) handler sind die Ergebnisse von giveHandlers fuer dieses Objekt
          - (string) metainformationen die Metainformationen zum Objekt als Ergebnis von readObjectsFromPath           - (string) metainformationen die Metainformationen zum Objekt als Ergebnis von readObjectsFromPath
         """          """
         objects=self.readObjectsFromPath(path)  
         if not objects:          objects=self.getSubDirsFromIndexMeta(path)
             objects={}  
           
           
           im=self.readObjectsFromPath(path)
           if not im:
               im={}
   
   
   
   
         im=self.getSubDirsFromIndexMeta(path)  
         for key in im.keys():          for key in im.keys():
             #virtuelle pfade hinzufuegen              #relle  pfade hinzufuegen, virtueller wird ueberschrieben
                           
             if not objects.has_key(key):  
                 objects[key]=im[key]                  objects[key]=im[key]
                                   
                   
           
         def sortLow(x,y):          def sortLow(x,y):
             return cmp(x.lower(),y.lower())              return cmp(x.lower(),y.lower())
                   
Line 397  class OSAS_storeOnline(SimpleItem): Line 432  class OSAS_storeOnline(SimpleItem):
         for object in objectSorted:          for object in objectSorted:
                           
             handler=self.giveHandlers(object,objects[object][0])              handler=self.giveHandlers(object,objects[object][0])
             print "format",objects[object][0]              if not(os.path.split(object)[1]=="."):
             if objects[object][0]=="OSAS_dir":                  if objects[object][0] in OSASDirObjects:
                                   
                 string="""<a href="?path=%s">%s</a>"""%(object,os.path.split(object)[1])                  string="""<a href="?path=%s">%s</a>"""%(object,os.path.split(object)[1])
                                   
Line 408  class OSAS_storeOnline(SimpleItem): Line 443  class OSAS_storeOnline(SimpleItem):
                                   
                 ret.append((string,handler,objects[object][1]))                  ret.append((string,handler,objects[object][1]))
             else:              else:
   
                 ret.append((os.path.split(object)[1],handler,objects[object][1]))                  ret.append((os.path.split(object)[1],handler,objects[object][1]))
   
                                             
Line 417  class OSAS_storeOnline(SimpleItem): Line 453  class OSAS_storeOnline(SimpleItem):
     def path_to_link(self,pathTmp=""):      def path_to_link(self,pathTmp=""):
         """generates navigation bar for viewfiles          """generates navigation bar for viewfiles
         @keyword pathTmp: optional, generisch="", pfad der erstellt werden soll          @keyword pathTmp: optional, generisch="", pfad der erstellt werden soll
         @return: html Fragment, pathTmp zerlegt, dass jeder Teil von Pfad unterhalb von rootFolderName direkt angesprunden werden kann.          @return: html Fragment, pathTmp zerlegt, dass jeder Teil von Pfad unterhalb von rootFolderName direkt angesprungen werden kann.
         """          """
   
         path=os.path.normpath(os.path.join(self.rootFolderName,pathTmp))          path=os.path.normpath(os.path.join(self.rootFolderName,pathTmp))

Removed from v.1.15  
changed lines
  Added in v.1.23


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