Annotation of OSA_system2/OSAS_root.py, revision 1.2
1.2 ! dwinter 1: """ OSAS_contains the basic classes for configuring the OSAS and
! 2: basic objects for displaying data.
! 3: All site specific adaptation should be made in OSAS_Root
! 4: """
1.1 dwinter 5:
6: from OSAS_helpers import *
7: import OSAS_helpers
8: from OFS.SimpleItem import SimpleItem
9: from time import localtime,strftime
10: from Acquisition import Implicit
11: from OFS.Folder import Folder
12: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
13: from Products.PageTemplates.PageTemplate import PageTemplate
14: import urllib
15: from urlparse import *
16: import re
17: import xml.dom.minidom
18: from types import *
19: import zLOG
20: import os.path
1.2 ! dwinter 21: import Globals
1.1 dwinter 22: from Globals import package_home
1.2 ! dwinter 23: from AccessControl import ClassSecurityInfo
1.1 dwinter 24:
25:
26: class OSAS_viewerObject(Folder):
27: """
28: Grundlegende Klasse fuer Viewer zur Zeit noch in Entwicklung
29:
30: """
31: meta_type="OSAS_ViewerObject__neu"
1.2 ! dwinter 32:
1.1 dwinter 33:
34: def __init__(self,id,title,prefix,objectTypes,ignorePath=""):
35: """inititialisiere die Klasse
36:
37: :Parameters:
38: - `id` : Zope ID des Objektes
39: - `title`: Titel des Objektes
40: - `prefix` : URL bzw. URL Rumpf der Zusammen mit dem Pfad des Objectes die Anzeige URL ergibt
41: - `objectType` : liste von Objekttypen die mittels dieses Viewers angezeigt werden können.
42: - `ignorePath` : Pfad der bei dem übergebenen Pfad element ingnoriert werden soll. Optional.
43: """
44: self.id=id
45: self.title=title
46: self.prefix=prefix
47: self.objectTypes=toList(objectTypes)
48: self.ignorePath=ignorePath
49:
50: manage_options = Folder.manage_options+(
51: {'label':'Main Config','action':'changeViewerObjectForm'},
52: )
53:
54: def changeViewerObjectForm(self):
55: """Main configuration"""
56: pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeViewerObjectForm.zpt')).__of__(self)
57: return pt()
58:
59: def changeViewerObject(self,title,prefix,objectTypes,ignorePath=None,RESPONSE=None):
60: """Change RootFolderName"""
61: self.title=title
62: self.prefix=prefix
63: self.ignorePath=ignorePath
64: self.objectTypes=toList(objectTypes)
65:
66: if RESPONSE is not None:
67: RESPONSE.redirect('manage_main')
68:
69:
70: def manage_addViewerObjectForm(self):
71: """form for adding a viewer Object"""
72: pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','addViewerObjectForm.zpt')).__of__(self)
73: return pt()
74:
75: def manage_addViewerObject(self,id,title,prefix,objectTypes,ignorePath,RESPONSE=None):
76: """add the OSAS_root"""
77: newObj=OSAS_viewerObject(id,title,prefix,objectTypes,ignorePath)
78: self._setObject(id,newObj)
79:
80: if RESPONSE is not None:
81: RESPONSE.redirect('manage_main')
82:
83:
84: class OSAS_root(Folder,Implicit):
85: """Implicit Folder of the Storage Systems"""
1.2 ! dwinter 86:
! 87: security=ClassSecurityInfo()
! 88:
1.1 dwinter 89: def __init__(self,id,rootFolderName,uploadServletUrl=None):
90: """initialize a new instance
91:
92:
93: @param id: Zope ID des Objektes
94: @param rootFolderName : path zum root folder des Storagesystems
95: @param uploadServerletUrl : url des UploadServlets (required fuer batch upload)
96:
97: """
98:
99: self.id = id
100: self.rootFolderName = rootFolderName
101: self.uploadServletUrl=uploadServletUrl
102:
103: meta_type="OSAS_Root__neu"
104:
105: manage_options = Folder.manage_options+(
106: {'label':'Main Config','action':'changeRootForm'},
107: )
108:
109:
110: OSASObjectTypes=OSAS_helpers.OSASObjectTypes
111:
112: def changeRootForm(self):
113: """Main configuration"""
114: pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeRootForm.zpt')).__of__(self)
115:
116: return pt()
117:
118: def changeRoot(self,rootFolderName,uploadServletUrl,RESPONSE=None):
119: """Change RootFolderName"""
120: self.rootFolderName=rootFolderName
121:
122: self.uploadServletUrl=uploadServletUrl
123:
124: if RESPONSE is not None:
125: RESPONSE.redirect('manage_main')
126:
127: localDate=localDate
128:
129: def getUploadServletUrl(self):
130: """gibt url des servlets zurueck"""
131: return self.uploadServletUrl
132:
133:
1.2 ! dwinter 134: def validateIndexMeta(self,data):
! 135: """TO BE DONE testet ob data ein gueltiges index.meta file ist, zur Zeit wird dom erzeugt ohne validierung.
! 136: @param data: zu testendes XML file als string
! 137: @return: zeiger auf dom falls ok, None andernfalls (z.Z: immmer dom falls parse possible)
! 138: """
! 139: try:
! 140: return xml.dom.minidom.parseString(xmlneu)
! 141: except:
! 142: return None
! 143:
! 144: security.declareProtected('View management screens','uploadExternalXMLString','uploadExternalXMLUrl','uploadExternalXML')
! 145:
! 146: def uploadExternalXMLString(self,index_meta_url,xml_string):
! 147: """lese ein xml file aus xml_url und schreibe es in den lokalen Filebaum
1.1 dwinter 148:
149: @param index_meta_url: url eines index.meta files auf dem lokalen Server, es gilt rootFolderName + pfad teil der url = pfad auf dem Server.
1.2 ! dwinter 150: @param xml_string: string mit index_meta ersetzt obiges index.meta
1.1 dwinter 151: @return: 'error' als String bei Fehler 'ok' bei ok.
152: """
1.2 ! dwinter 153:
! 154: return self.uploadExternalXML(index_meta_url,xml_string)
! 155:
! 156:
! 157: def uploadExternalXMLUrl(self,index_meta_url,xml_url):
! 158: """lese ein xml file aus xml_url und schreibe es in den lokalen Filebaum
1.1 dwinter 159:
1.2 ! dwinter 160: @param index_meta_url: url eines index.meta files auf dem lokalen Server, es gilt rootFolderName + pfad teil der url = pfad auf dem Server.
! 161: @param xml_url: externe url auf ein index_meta ersetzt obiges index.meta
! 162: @return: 'error' als String bei Fehler 'ok' bei ok.
! 163: """
! 164:
! 165: return self.uploadExternalXML(index_meta_url,xml_url)
1.1 dwinter 166:
1.2 ! dwinter 167:
! 168: def uploadExternalXML(self,index_meta_url,xml_url=None,xml_string=None):
! 169: """lese ein xml file aus xml_url und schreibe es in den lokalen Filebaum
1.1 dwinter 170:
1.2 ! dwinter 171: @param index_meta_url: url eines index.meta files auf dem lokalen Server, es gilt rootFolderName + pfad teil der url = pfad auf dem Server.
! 172: @param xml_url: (optional, default=None) externe url auf ein index_meta ersetzt obiges index.meta
! 173: @param xml_string: (optional, default=None) string mit index_meta ersetzt obiges index.meta
! 174: @return: 'error' als String bei Fehler 'ok' bei ok.
! 175: """
1.1 dwinter 176:
1.2 ! dwinter 177: if xml_url:
! 178: xmlneu=urllib.urlopen(xml_url).read()
! 179: else:
! 180: xmlneu=xml_string
! 181:
! 182: dom=self.validateIndexMeta(xmlneu)
! 183: if not dom:
1.1 dwinter 184: zLOG.LOG('OSAS_Root (downloadExternalXML)',zLOG.ERROR,'cannot parse: %s', xml_url)
185: return "error"
186:
187:
188: path=self.rootFolderName+urlparse(index_meta_url)[2]
189:
190: fh=open(path,'w')
191:
192: fh.write(xmlneu)
193: fh.close()
194: return "ok"
195:
1.2 ! dwinter 196: security.declareProtected('View','getIndexMetaFile')
! 197:
! 198:
! 199: def getIndexMetaFile(self,index_meta):
! 200: """gibt index metafile aus
! 201: @param index_meta: index_meta ist eine URI entweder url des index_meta oder file mit file://
! 202: """
! 203: filearray=[]
! 204: urlparsed=urlparse(index_meta)[1:]
! 205:
! 206: for x in urlparsed:
! 207:
! 208: if not (x==''):
! 209: filearray.append(x)
! 210:
! 211: path=os.sep.join(filearray)
! 212:
! 213: realPath=os.path.normpath(os.path.join(self.rootFolderName,path))
1.1 dwinter 214:
1.2 ! dwinter 215: if realPath.find(self.rootFolderName) <0: #versuch auf Pfad unterhalb des Rootfolder zuzugreifen
! 216: return {}
! 217:
! 218:
! 219: if not os.path.isfile(realPath):
! 220: return None,"(ERROR) path %s does not exist."%path
! 221:
! 222:
! 223: fh=file(realPath,'r')
! 224: str=fh.read()
! 225: fh.close()
! 226: return str
! 227:
! 228:
! 229: Globals.InitializeClass(OSAS_root)
! 230:
1.1 dwinter 231: def manage_addOSAS_rootForm(self):
232: """interface for adding the OSAS_root"""
233: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addOSAS_rootForm.zpt')).__of__(self)
234: return pt()
235:
236: def manage_addOSAS_root(self,id,RootFolderName,uploadServletUrl,RESPONSE=None):
237: """add the OSAS_root"""
238: newObj=OSAS_root(id,RootFolderName,uploadServletUrl)
239: self._setObject(id,newObj)
240: if RESPONSE is not None:
241: RESPONSE.redirect('manage_main')
242:
243:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>