--- OSA_system2/OSAS_browser.py 2005/01/21 14:03:24 1.7 +++ OSA_system2/OSAS_browser.py 2005/02/10 19:50:18 1.8 @@ -14,6 +14,9 @@ import os.path import stat import xml.dom.minidom from types import * +import xmlrpclib + + class OSAS_storeOnline(SimpleItem): """Webfrontend für das Storagesystem @@ -25,12 +28,14 @@ class OSAS_storeOnline(SimpleItem): _v_fileSystem={} #chache fuer filesystem _v_metaFiles={} #chache fuer indexMeta + + - def __init__(self,id): + def __init__(self,id,serverUrl): """initialize a new instance @param id: Zope id""" self.id = id - + self.serverUrl = serverUrl security.declareProtected('View','index_html') @@ -50,75 +55,11 @@ class OSAS_storeOnline(SimpleItem): """ realPath=os.path.normpath(os.path.join(self.rootFolderName,path)) #suche index.meta - while (not os.path.exists(os.path.join(realPath,'index.meta'))) and (not ((realPath=="") or (realPath=="/"))): - realPath=os.path.split(realPath)[0] - - if realPath=='' or realPath=='/': - if os.path.exists(os.path.join(realPath,'index.meta')): - return os.path.join(realPath,'index.meta') - else: - return None - else: - return os.path.join(realPath,'index.meta') - - 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. - """ - - indexMeta=self.findIndexMeta(path) # suche index.meta + server=xmlrpclib.Server(self.serverUrl) + return server.findIndexMeta(realPath) - if not indexMeta: - return None - - realPath=os.path.split(indexMeta)[0] - path=os.path.normpath(os.path.join(self.rootFolderName,path)) - - try: - dom=xml.dom.minidom.parse(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): @@ -128,7 +69,8 @@ class OSAS_storeOnline(SimpleItem): @todo: Rueckgabe einer Beschreibung gemaess Metadaten """ ret={} - indexMeta=self.findIndexMeta(path)#findex index.meta zu path. + server=xmlrpclib.Server(self.serverUrl) + indexMeta,stats=server.findIndexMetaWithStats(path)#findex index.meta zu path. if not indexMeta: return ret @@ -141,7 +83,7 @@ class OSAS_storeOnline(SimpleItem): #teste ob schon im cache - stats=os.stat(indexMeta) + if self._v_metaFiles.has_key(path) and (self._v_metaFiles[path][0]==stats[stat.ST_MTIME]): return self._v_metaFiles[path][1] @@ -180,17 +122,7 @@ class OSAS_storeOnline(SimpleItem): return ret - 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 readObjectsFromPath(self,path="",metaDataId=None): """Liest files aus dem path und speichert im cache _v_filesystem. @@ -199,7 +131,7 @@ class OSAS_storeOnline(SimpleItem): @keyword metaDataId: Optional, id des OSAS_Metadata Object, dass benutzt werden soll, generisch wird das erste Object, dass in parent gefunden wird angezeigt. @return: directory der Form [pfad zum Objekt] -> (fileType,metadatum als String) """ - + server=xmlrpclib.Server(self.serverUrl) realPath=os.path.normpath(os.path.join(self.rootFolderName,path)) if metaDataId: @@ -220,18 +152,19 @@ class OSAS_storeOnline(SimpleItem): return {} - if not os.path.exists(realPath): - #return None,"(ERROR) path %s does not exist."%path - return None + - stats=os.stat(realPath) + stats=server.getStat(realPath) + if not stats: + return None + #teste ob schon im cache if self._v_fileSystem.has_key(realPath) and (self._v_fileSystem[realPath][0]==stats[stat.ST_MTIME]): return self._v_fileSystem[realPath][1] - dir=os.listdir(realPath) + dir=server.listdir(realPath) ret={} for filename in dir: object=os.path.join(realPath,filename) @@ -351,7 +284,8 @@ class OSAS_storeOnline(SimpleItem): @param path: Pfad des index.met @return: index.meta file """ - tmp=OSAS_helpers.getMetaFile(self,path) + server=xmlrpclib.Server(self.serverUrl) + tmp=server.getMetaFile(path) #zLOG.LOG("EE",zLOG.INFO,type(tmp)) return tmp