--- OSA_system2/OSAS_root.py 2004/11/29 09:48:07 1.1 +++ OSA_system2/OSAS_root.py 2004/12/23 08:30:56 1.2 @@ -1,4 +1,7 @@ -""" OSAS_contains the basic classes for configuring the OSAS and basic objects for displaying data. All site specific adaptation should be made in OSAS_Root""" +""" OSAS_contains the basic classes for configuring the OSAS and +basic objects for displaying data. +All site specific adaptation should be made in OSAS_Root +""" from OSAS_helpers import * import OSAS_helpers @@ -15,7 +18,9 @@ import xml.dom.minidom from types import * import zLOG import os.path +import Globals from Globals import package_home +from AccessControl import ClassSecurityInfo class OSAS_viewerObject(Folder): @@ -24,6 +29,7 @@ class OSAS_viewerObject(Folder): """ meta_type="OSAS_ViewerObject__neu" + def __init__(self,id,title,prefix,objectTypes,ignorePath=""): """inititialisiere die Klasse @@ -77,6 +83,9 @@ def manage_addViewerObject(self,id,title class OSAS_root(Folder,Implicit): """Implicit Folder of the Storage Systems""" + + security=ClassSecurityInfo() + def __init__(self,id,rootFolderName,uploadServletUrl=None): """initialize a new instance @@ -122,21 +131,56 @@ class OSAS_root(Folder,Implicit): return self.uploadServletUrl - def downloadExternalXML(self,index_meta_url,xml_url): - """lade lese ein xml file aus URL und schreibe es in den localen Filebaum + def validateIndexMeta(self,data): + """TO BE DONE testet ob data ein gueltiges index.meta file ist, zur Zeit wird dom erzeugt ohne validierung. + @param data: zu testendes XML file als string + @return: zeiger auf dom falls ok, None andernfalls (z.Z: immmer dom falls parse possible) + """ + try: + return xml.dom.minidom.parseString(xmlneu) + except: + return None + + security.declareProtected('View management screens','uploadExternalXMLString','uploadExternalXMLUrl','uploadExternalXML') + + def uploadExternalXMLString(self,index_meta_url,xml_string): + """lese ein xml file aus xml_url und schreibe es in den lokalen Filebaum @param index_meta_url: url eines index.meta files auf dem lokalen Server, es gilt rootFolderName + pfad teil der url = pfad auf dem Server. - @param xml_url: externe url file hier ersetzt obiges index.meta + @param xml_string: string mit index_meta ersetzt obiges index.meta @return: 'error' als String bei Fehler 'ok' bei ok. """ + + return self.uploadExternalXML(index_meta_url,xml_string) + + + def uploadExternalXMLUrl(self,index_meta_url,xml_url): + """lese ein xml file aus xml_url und schreibe es in den lokalen Filebaum + @param index_meta_url: url eines index.meta files auf dem lokalen Server, es gilt rootFolderName + pfad teil der url = pfad auf dem Server. + @param xml_url: externe url auf ein index_meta ersetzt obiges index.meta + @return: 'error' als String bei Fehler 'ok' bei ok. + """ + + return self.uploadExternalXML(index_meta_url,xml_url) - xmlneu=urllib.urlopen(xml_url).read() + + def uploadExternalXML(self,index_meta_url,xml_url=None,xml_string=None): + """lese ein xml file aus xml_url und schreibe es in den lokalen Filebaum - try: - dom=xml.dom.minidom.parseString(xmlneu) - except: + @param index_meta_url: url eines index.meta files auf dem lokalen Server, es gilt rootFolderName + pfad teil der url = pfad auf dem Server. + @param xml_url: (optional, default=None) externe url auf ein index_meta ersetzt obiges index.meta + @param xml_string: (optional, default=None) string mit index_meta ersetzt obiges index.meta + @return: 'error' als String bei Fehler 'ok' bei ok. + """ + if xml_url: + xmlneu=urllib.urlopen(xml_url).read() + else: + xmlneu=xml_string + + dom=self.validateIndexMeta(xmlneu) + if not dom: zLOG.LOG('OSAS_Root (downloadExternalXML)',zLOG.ERROR,'cannot parse: %s', xml_url) return "error" @@ -149,7 +193,41 @@ class OSAS_root(Folder,Implicit): fh.close() return "ok" + security.declareProtected('View','getIndexMetaFile') + + + def getIndexMetaFile(self,index_meta): + """gibt index metafile aus + @param index_meta: index_meta ist eine URI entweder url des index_meta oder file mit file:// + """ + filearray=[] + urlparsed=urlparse(index_meta)[1:] + + for x in urlparsed: + + if not (x==''): + filearray.append(x) + + path=os.sep.join(filearray) + + realPath=os.path.normpath(os.path.join(self.rootFolderName,path)) + if realPath.find(self.rootFolderName) <0: #versuch auf Pfad unterhalb des Rootfolder zuzugreifen + return {} + + + if not os.path.isfile(realPath): + return None,"(ERROR) path %s does not exist."%path + + + fh=file(realPath,'r') + str=fh.read() + fh.close() + return str + + +Globals.InitializeClass(OSAS_root) + def manage_addOSAS_rootForm(self): """interface for adding the OSAS_root""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addOSAS_rootForm.zpt')).__of__(self)