Diff for /OSA_system2/OSAS_browser.py between versions 1.9 and 1.10

version 1.9, 2005/02/10 20:23:24 version 1.10, 2005/02/11 16:27:01
Line 15  import stat Line 15  import stat
 import xml.dom.minidom  import xml.dom.minidom
 from types import *  from types import *
 import xmlrpclib  import xmlrpclib
   from OSAS_helpers import *
   
   
 class OSAS_storeOnline(SimpleItem):  class OSAS_storeOnline(SimpleItem):
Line 27  class OSAS_storeOnline(SimpleItem): Line 27  class OSAS_storeOnline(SimpleItem):
     security=ClassSecurityInfo()      security=ClassSecurityInfo()
   
     _v_fileSystem={} #chache fuer filesystem      _v_fileSystem={} #chache fuer filesystem
       _v_metaFiles={} #chache fuer indexMeta
       def getMetaFile(self,path):
           """get index.meta and translate it to HTML"""
           """Lies Metafile ein
           @param path: Pfad des index.met        
           @return: index.meta file
           """
           html=[]
           server=xmlrpclib.Server(self.serverUrl)
           
   
           f=server.getFile(path+"/index.meta")
           
           if not f:
                 
                 return self.getMetaInfoFromIndexMeta(path)
                 #return "NO_METADATA"
           else:
                         
              dom = xml.dom.minidom.parseString(f)
              
              try:
                  name=getText(dom.getElementsByTagName("name")[0].childNodes)
              except:
                  name="NOT_DEFINED!!!"
              try:
                  creator=getText(dom.getElementsByTagName("creator")[0].childNodes)
              except:
                  creator="NOT_DEFINED!!!"
   
              try:
                  creation_date=getText(dom.getElementsByTagName("archive-creation-date")[0].childNodes)
              except:
                  creation_date="NOT_DEFINED!!!"
   
              try:
                  description=getText(dom.getElementsByTagName("description")[0].childNodes)
              except:
                  description="NOT_DEFINED!!!"
   
              try:
               type=getText(dom.getElementsByTagName("content-type")[0].childNodes) 
              except:
               type=""
              if type=="scanned document":
                       html="<h3>Document: "+name+"</h3>"
              elif type=="folder":
                       html="<h3>Folder: "+name+"</h3>"
              else:
                       html="<h3>Document: "+name+"</h3>"
   
              html=html+"<p><i>created by: "+creator+" at: "+creation_date+"</i></p>" 
              html=html+"<h4>Description</h4><p>"+description+"</p>"
              try:
               bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0]
               if bib.attributes.has_key('type'):
                 html=html+"<h4>Info ("+bib.attributes['type'].value+")</h4>"
               else:
                 html=html+"<h4>Info</h4>"
               html=html+getBib(bib.childNodes)
   
              except:
               """none"""
   
       #        html=html.encode('utf-8','replace')+getBib(bib.childNodes).encode('utf-8','replace')
   
              return html
   
   
       def getMetaInfoFromIndexMeta(self,path):
           """metadaten zu path als html aus dem index.meta file zu path (meta tag im file bzw. dir container)
           @param path: Pfad auf das Object relativ zum rootFolderName
           @return: metadata als html
           """
           xmlInfos=self.findEntryInIndexMeta(path)
           if xmlInfos:
               return OSAS_helpers.getMetaInfoFromXML(path,xmlInfos)
           else:
               return ""
      
       def findEntryInIndexMeta(self,path):
           """Finde im naechstgelegenden index.meta relativ zu path den entprechenden Eintrag fuer diesen Pfad.
           @param path: Pfad auf das Object relativ zum rootFolderName
           @return: den Teil von Index.meta der Informationen zu path enthaelt, None wenn error.
           """
           
           server=xmlrpclib.Server(self.serverUrl)
           indexMeta=server.findIndexMeta(path) # suche index.meta
           
           if not indexMeta:
               return None
   
           realPath=os.path.split(indexMeta)[0]
           path=os.path.normpath(path)
   
           try:
               
               dom=xml.dom.minidom.parseString(server.getFile(indexMeta))
           except:
               zLOG.LOG("OSAS_browser (findEntryInIndexMeta)",zLOG.ERROR,"Cannot parse: %s"%indexMeta)
           #ist path ein directory? 
           dirs=dom.getElementsByTagName('dir')
           for dir in dirs:
               pathes=dir.getElementsByTagName('path')
               if pathes:
                   pathX=OSAS_helpers.getText(pathes[0].childNodes)
               else:
                   pathX=""
               names=dir.getElementsByTagName('name')
               if names:
                   name=OSAS_helpers.getText(names[0].childNodes)
               else:
                   name=""
   
               checkpath=os.path.normpath(os.path.join(realPath,pathX,name))
               if checkpath==path:
                   
                   return dir.toxml()
   
           #ist path ein file?
           files=dom.getElementsByTagName('file')
           for dir in dirs:
               pathes=dir.getElementsByTagName('path')
               if pathes:
                   pathX=OSAS_helpers.getText(pathes[0].childNodes)
               else:
                   pathX=""
               names=dir.getElementsByTagName('name')
               if names:
                   name=OSAS_helpers.getText(names[0].childNodes)
               else:
                   name=""
   
               checkpath=os.path.normpath(os.path.join(realPath,pathX,name))
               if checkpath==path:
                   
                   return dir.toxml()
   
           
           return None
   
   
       def getSubDirsFromIndexMeta(self,path):
           
           """Gebe alle path untergeordenten Objekte aus
           @param path: optional, default ist "", Pfad auf das Object relativ zum rootFolderName
           @return: Directory [pfad auf das Objekt]->(fileType,''), fileType ist hierbei OSAS_dir_archive falls Object ein directory und OSAS_file_archive falls das Object ein File ist,der zweite Eintrag des Tupels ist zur Zeit immer '', spaeter wird hier die Beschreibung gemaess Metadaten stehen, wie bei readObjectsFromPath.
           @todo: Rueckgabe einer Beschreibung gemaess Metadaten
           """
           ret={}
           server=xmlrpclib.Server(self.serverUrl)
           indexMeta,stats=server.findIndexMetaWithStats(path)#findex index.meta zu path.
   
           if not indexMeta:
               return ret
   
           realPath=os.path.split(indexMeta)[0]
           path=path.replace(realPath,"")
           if path and (path[0]==os.sep): #falls am Anfang os.sep steht lösche dieses.
               path=path[1:]
   
   
   
           #teste ob schon im cache
           
           if self._v_metaFiles.has_key(path) and (self._v_metaFiles[path][0]==stats[stat.ST_MTIME]):
               return self._v_metaFiles[path][1]
   
           try:
               dom=xml.dom.minidom.parseString(server.getFile(indexMeta))
           except:
               zLOG.LOG("OSAS_browser (getSubDirsFromIndexMeta)",zLOG.ERROR,"Cannot parse: %s"%indexMeta)
               return ret
   
           dirs=[]
           dirs=dom.getElementsByTagName('dir')+dom.getElementsByTagName('file')
       
           for dir in dirs:
               pathes=dir.getElementsByTagName('path')
               if pathes:
                   pathX=OSAS_helpers.getText(pathes[0].childNodes)
               else:
                   pathX=""
               names=dir.getElementsByTagName('name')
               if names:
                   name=OSAS_helpers.getText(names[0].childNodes)
               else:
                   name=""
   
               #print "PP",pathX,path
               if pathX==path:
                   if dir.tagName=="dir":
                       fileType="OSAS_dir_archive"
                   else:
                       fileType="OSAS_file_archive"
   
                   object=os.path.join(realPath,pathX,name)
                   ret[object.encode('utf-8')]=(fileType,'')
   
           self._v_metaFiles[path]=(stats[stat.ST_MTIME],ret) # speicher im chache
         
           return ret
   
         
           
Line 153  class OSAS_storeOnline(SimpleItem): Line 355  class OSAS_storeOnline(SimpleItem):
         if not objects:          if not objects:
             objects={}              objects={}
   
         server=xmlrpclib.Server(self.serverUrl)  
         im=server.getSubDirsFromIndexMeta(path)          im=self.getSubDirsFromIndexMeta(path)
         for key in im.keys():          for key in im.keys():
             #virtuelle pfade hinzufuegen              #virtuelle pfade hinzufuegen
                           
Line 219  class OSAS_storeOnline(SimpleItem): Line 421  class OSAS_storeOnline(SimpleItem):
             i=i-1              i=i-1
         return string          return string
   
     def getMetaFile(self,path):  
         """Lies Metafile ein  
         @param path: Pfad des index.met          
         @return: index.meta file  
         """  
         server=xmlrpclib.Server(self.serverUrl)  
         tmp=server.getMetaFile(path)  
         #zLOG.LOG("EE",zLOG.INFO,type(tmp))  
           
         return tmp  
   
 InitializeClass(OSAS_storeOnline)  InitializeClass(OSAS_storeOnline)
           

Removed from v.1.9  
changed lines
  Added in v.1.10


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