--- OSA_system2/OSAS_server.py 2005/02/10 19:50:18 1.1 +++ OSA_system2/OSAS_server.py 2005/02/10 20:23:24 1.2 @@ -10,9 +10,72 @@ from OSAS_helpers import * class OSAS_storeOnlineServer(SimpleItem): """Server for store Online system""" - + + _v_metaFiles={} #chache fuer indexMeta meta_type="OSAS_server" + 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=self.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.parse(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 + + + def findIndexMeta(self,realPath=""): """finde Rueckwaerts im Baum von Pfad ausgehend, dass erste index.meta file @keyword path: default ist "", Pfad auf das Object