--- OSA_system2/OSAS_browser.py 2005/03/07 19:33:42 1.16 +++ OSA_system2/OSAS_browser.py 2005/11/25 17:49:53 1.21 @@ -14,6 +14,7 @@ import bz2 import os import os.path import stat +import Ft.Xml.XPath import xml.dom.minidom from types import * import xmlrpclib @@ -78,7 +79,7 @@ class OSAS_storeOnline(SimpleItem): return self.getMetaInfoFromIndexMeta(path) #return "NO_METADATA" else: - + dom = xml.dom.minidom.parseString(f) try: @@ -158,8 +159,8 @@ class OSAS_storeOnline(SimpleItem): path=os.path.normpath(path) try: - - dom=xml.dom.minidom.parseString(server.getFile(indexMeta)) + dom = NonvalidatingReader.parseString(server.getFile(indexMeta),"http://www.mpiwg-berlin.mpg.de/") + except: zLOG.LOG("OSAS_browser (findEntryInIndexMeta)",zLOG.ERROR,"Cannot parse: %s"%indexMeta) return None @@ -173,8 +174,8 @@ class OSAS_storeOnline(SimpleItem): searchPath=searchPath[1:] #ist path ein directory? 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: return dirs[0].toxml @@ -182,8 +183,8 @@ class OSAS_storeOnline(SimpleItem): #ist path ein file? 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: return dirs[0].toxml() @@ -198,6 +199,7 @@ class OSAS_storeOnline(SimpleItem): @todo: Rueckgabe einer Beschreibung gemaess Metadaten """ ret={} + startPath=path server=xmlrpclib.Server(self.serverUrl) indexMeta,stats=server.findIndexMetaWithStats(path)#findex index.meta zu path. @@ -211,11 +213,11 @@ class OSAS_storeOnline(SimpleItem): - #teste ob schon im cache zur Zeit kein chache wenn index.meta file nicht im selben ordner wir path. - print "PPP",path,"x",realPath - if self._v_metaFiles.has_key(realPath) and (self._v_metaFiles[realPath][0]==stats[stat.ST_MTIME]) and (path==""): - print "from cache" - return self._v_metaFiles[realPath][1] + #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(startPath) and (self._v_metaFiles[realPath][0]==stats[stat.ST_MTIME]) and (path==""): + # + # return self._v_metaFiles[startPath][1] try: dom=xml.dom.minidom.parseString(server.getFile(indexMeta)) @@ -248,7 +250,7 @@ class OSAS_storeOnline(SimpleItem): object=os.path.join(realPath,pathX,name) ret[object.encode('utf-8')]=(fileType,'') - self._v_metaFiles[realPath]=(stats[stat.ST_MTIME],ret) # speicher im chache + self._v_metaFiles[startPath]=(stats[stat.ST_MTIME],ret) # speicher im chache return ret @@ -319,9 +321,9 @@ class OSAS_storeOnline(SimpleItem): 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] + #if self._v_fileSystem.has_key(realPath) and (self._v_fileSystem[realPath][0]==stats[stat.ST_MTIME]): + # + # return self._v_fileSystem[realPath][1] indexMetas=server.getAllIndexMetasOfSubDirs(realPath) dir=indexMetas.keys() @@ -347,9 +349,9 @@ class OSAS_storeOnline(SimpleItem): if 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' else: @@ -373,10 +375,10 @@ class OSAS_storeOnline(SimpleItem): for handler in self.ZopeFind(self.aq_parent,obj_metatypes=['OSAS_HandlerObject__neu'],search_sub=1): if type in handler[1].objectTypes: - try: + try: path=path.replace(getattr(handler[1],'ignorePath',''),'') except: - pass + pass url=handler[1].prefix%path text=handler[1].title string="""%s"""%(url,text) @@ -393,18 +395,24 @@ class OSAS_storeOnline(SimpleItem): - (string) handler sind die Ergebnisse von giveHandlers fuer dieses Objekt - (string) metainformationen die Metainformationen zum Objekt als Ergebnis von readObjectsFromPath """ - objects=self.readObjectsFromPath(path) - if not objects: - objects={} + objects=self.getSubDirsFromIndexMeta(path) - im=self.getSubDirsFromIndexMeta(path) + + + im=self.readObjectsFromPath(path) + if not im: + im={} + + + + for key in im.keys(): - #virtuelle pfade hinzufuegen + #relle pfade hinzufuegen, virtueller wird ueberschrieben + + objects[key]=im[key] - if not objects.has_key(key): - objects[key]=im[key] - + def sortLow(x,y): return cmp(x.lower(),y.lower()) @@ -437,7 +445,7 @@ class OSAS_storeOnline(SimpleItem): def path_to_link(self,pathTmp=""): """generates navigation bar for viewfiles @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)) @@ -468,7 +476,7 @@ class OSAS_storeOnline(SimpleItem): InitializeClass(OSAS_storeOnline) - + def manage_addOSAS_storeOnlineForm(self): """interface for adding the OSAS_storeOnline""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addStoreOnline.zpt')).__of__(self)