|
|
| version 1.8, 2005/02/10 19:50:18 | version 1.12, 2005/02/11 18:11:52 |
|---|---|
| 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 28 class OSAS_storeOnline(SimpleItem): | Line 28 class OSAS_storeOnline(SimpleItem): |
| _v_fileSystem={} #chache fuer filesystem | _v_fileSystem={} #chache fuer filesystem |
| _v_metaFiles={} #chache fuer indexMeta | _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") | |
| def __init__(self,id,serverUrl): | if not f: |
| """initialize a new instance | |
| @param id: Zope id""" | |
| self.id = id | |
| self.serverUrl = serverUrl | |
| return self.getMetaInfoFromIndexMeta(path) | |
| #return "NO_METADATA" | |
| else: | |
| security.declareProtected('View','index_html') | dom = xml.dom.minidom.parseString(f) |
| def index_html(self): | |
| """main view either standard template zpt/storeOnline_index_html.zpt or storeOnline_index.html in tree""" | try: |
| if hasattr(self,'storeOnline_index.html'): | name=getText(dom.getElementsByTagName("name")[0].childNodes) |
| return getattr(self,'storeOnline_index.html')() | 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: | else: |
| pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','storeOnline_index_html.zpt')).__of__(self) | html="<h3>Document: "+name+"</h3>" |
| return pt() | |
| 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) | |
| def findIndexMeta(self,path=""): | except: |
| """finde Rueckwaerts im Baum von Pfad ausgehend, dass erste index.meta file | """none""" |
| @keyword path: default ist "", Pfad auf das Object relativ zum rootFolderName | |
| @return: None falls kein index.meta existiert sonst Pfad auf das index.meta | # 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 | |
| """ | """ |
| realPath=os.path.normpath(os.path.join(self.rootFolderName,path)) | xmlInfos=self.findEntryInIndexMeta(path) |
| #suche index.meta | 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) | server=xmlrpclib.Server(self.serverUrl) |
| return server.findIndexMeta(realPath) | 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): | def getSubDirsFromIndexMeta(self,path): |
| Line 88 class OSAS_storeOnline(SimpleItem): | Line 196 class OSAS_storeOnline(SimpleItem): |
| return self._v_metaFiles[path][1] | return self._v_metaFiles[path][1] |
| try: | try: |
| dom=xml.dom.minidom.parse(indexMeta) | dom=xml.dom.minidom.parseString(server.getFile(indexMeta)) |
| except: | except: |
| zLOG.LOG("OSAS_browser (getSubDirsFromIndexMeta)",zLOG.ERROR,"Cannot parse: %s"%indexMeta) | zLOG.LOG("OSAS_browser (getSubDirsFromIndexMeta)",zLOG.ERROR,"Cannot parse: %s"%indexMeta) |
| return ret | |
| dirs=[] | dirs=[] |
| dirs=dom.getElementsByTagName('dir')+dom.getElementsByTagName('file') | dirs=dom.getElementsByTagName('dir')+dom.getElementsByTagName('file') |
| Line 116 class OSAS_storeOnline(SimpleItem): | Line 224 class OSAS_storeOnline(SimpleItem): |
| fileType="OSAS_file_archive" | fileType="OSAS_file_archive" |
| object=os.path.join(realPath,pathX,name) | object=os.path.join(realPath,pathX,name) |
| ret[object]=(fileType,'') | ret[object.encode('utf-8')]=(fileType,'') |
| self._v_metaFiles[path]=(stats[stat.ST_MTIME],ret) # speicher im chache | self._v_metaFiles[path]=(stats[stat.ST_MTIME],ret) # speicher im chache |
| return ret | return ret |
| def __init__(self,id,serverUrl): | |
| """initialize a new instance | |
| @param id: Zope id""" | |
| self.id = id | |
| self.serverUrl = serverUrl | |
| security.declareProtected('View','index_html') | |
| def index_html(self): | |
| """main view either standard template zpt/storeOnline_index_html.zpt or storeOnline_index.html in tree""" | |
| if hasattr(self,'storeOnline_index.html'): | |
| return getattr(self,'storeOnline_index.html')() | |
| else: | |
| pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','storeOnline_index_html.zpt')).__of__(self) | |
| return pt() | |
| def findIndexMeta(self,path=""): | |
| """finde Rueckwaerts im Baum von Pfad ausgehend, dass erste index.meta file | |
| @keyword path: default ist "", Pfad auf das Object relativ zum rootFolderName | |
| @return: None falls kein index.meta existiert sonst Pfad auf das index.meta | |
| """ | |
| realPath=os.path.normpath(os.path.join(self.rootFolderName,path)) | |
| #suche index.meta | |
| server=xmlrpclib.Server(self.serverUrl) | |
| return server.findIndexMeta(realPath) | |
| def readObjectsFromPath(self,path="",metaDataId=None): | def readObjectsFromPath(self,path="",metaDataId=None): |
| """Liest files aus dem path und speichert im cache _v_filesystem. | """Liest files aus dem path und speichert im cache _v_filesystem. |
| Line 165 class OSAS_storeOnline(SimpleItem): | Line 305 class OSAS_storeOnline(SimpleItem): |
| return self._v_fileSystem[realPath][1] | return self._v_fileSystem[realPath][1] |
| dir=server.listdir(realPath) | dir=server.listdir(realPath) |
| ret={} | ret={} |
| for filename in dir: | for filename in dir: |
| object=os.path.join(realPath,filename) | object=os.path.join(realPath,filename) |
| fileType=OSAS_helpers.checkOSASFileType(object) | fileType=OSAS_helpers.checkOSASFileType(object,server) |
| if fileType: | if fileType: |
| if metaData: | if metaData: |
| ret[object]=(fileType,metaData.getDisplayFieldsAsStr(object)) | ret[object]=(fileType,metaData.getDisplayFieldsAsStr(object,server)) |
| else: | else: |
| ret[object]=(fileType,'') | ret[object]=(fileType,'') |
| Line 214 class OSAS_storeOnline(SimpleItem): | Line 356 class OSAS_storeOnline(SimpleItem): |
| objects=self.readObjectsFromPath(path) | objects=self.readObjectsFromPath(path) |
| if not objects: | if not objects: |
| objects={} | objects={} |
| im=self.getSubDirsFromIndexMeta(path) | im=self.getSubDirsFromIndexMeta(path) |
| for key in im.keys(): | for key in im.keys(): |
| #virtuelle pfade hinzufuegen | #virtuelle pfade hinzufuegen |
| Line 279 class OSAS_storeOnline(SimpleItem): | Line 423 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) |