Annotation of OSA_system2/OSAS_root.py, revision 1.5
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:
1.3 dwinter 26: class OSAS_handlerObject(Folder):
1.1 dwinter 27: """
1.3 dwinter 28: Grundlegende Klasse fuer Handler zur Zeit noch in Entwicklung
1.1 dwinter 29:
30: """
1.3 dwinter 31: meta_type="OSAS_HandlerObject__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
1.3 dwinter 41: - `objectType` : liste von Objekttypen die mittels dieses Handlers angezeigt werden können.
1.1 dwinter 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+(
1.3 dwinter 51: {'label':'Main Config','action':'changeHandlerObjectForm'},
1.1 dwinter 52: )
53:
1.3 dwinter 54: def changeHandlerObjectForm(self):
1.1 dwinter 55: """Main configuration"""
1.3 dwinter 56: pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeHandlerObjectForm.zpt')).__of__(self)
1.1 dwinter 57: return pt()
58:
1.3 dwinter 59: def changeHandlerObject(self,title,prefix,objectTypes,ignorePath=None,RESPONSE=None):
1.1 dwinter 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:
1.3 dwinter 70: def manage_addHandlerObjectForm(self):
71: """form for adding a handler Object"""
72: pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','addHandlerObjectForm.zpt')).__of__(self)
1.1 dwinter 73: return pt()
74:
1.3 dwinter 75: def manage_addHandlerObject(self,id,title,prefix,objectTypes,ignorePath,RESPONSE=None):
1.1 dwinter 76: """add the OSAS_root"""
1.3 dwinter 77: newObj=OSAS_handlerObject(id,title,prefix,objectTypes,ignorePath)
1.1 dwinter 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.4 dwinter 89: def __init__(self,id,rootFolderName,serverUrl,uploadServletUrl=None):
1.1 dwinter 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
1.4 dwinter 102: self.serverUrl=serverUrl
1.5 ! dwinter 103: meta_type="OSAS_Root"
1.1 dwinter 104:
105: manage_options = Folder.manage_options+(
106: {'label':'Main Config','action':'changeRootForm'},
107: )
108:
109:
110: OSASObjectTypes=OSAS_helpers.OSASObjectTypes
1.5 ! dwinter 111:
! 112: security.declareProtected("View management screens","getOSASObjectTypes")
! 113: def getOSASObjectTypes(self):
! 114: """return list of objecttypes"""
! 115: return OSASObjectTypes
! 116:
! 117: def setProxy(self,name,value):
! 118: """set proxy"""
! 119: self.REQUEST.SESSION[name]=value
! 120: return True
! 121:
! 122: def listToSingle(self,path):
! 123: """list to single"""
! 124: if type(path)==ListType:
! 125: return path[0]
! 126: else:
! 127: return path
! 128:
! 129: def splitPath(self,path):
! 130: """split path"""
! 131: if type(path)==ListType:
! 132: path=path[0]
! 133: return os.path.split(path)
1.1 dwinter 134:
135: def changeRootForm(self):
136: """Main configuration"""
137: pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeRootForm.zpt')).__of__(self)
138:
139: return pt()
140:
1.4 dwinter 141: def changeRoot(self,rootFolderName,uploadServletUrl,serverUrl,RESPONSE=None):
1.1 dwinter 142: """Change RootFolderName"""
143: self.rootFolderName=rootFolderName
1.4 dwinter 144: self.serverUrl=serverUrl
1.1 dwinter 145: self.uploadServletUrl=uploadServletUrl
146:
147: if RESPONSE is not None:
148: RESPONSE.redirect('manage_main')
149:
150: localDate=localDate
151:
152: def getUploadServletUrl(self):
153: """gibt url des servlets zurueck"""
154: return self.uploadServletUrl
155:
156:
1.2 dwinter 157: def validateIndexMeta(self,data):
158: """TO BE DONE testet ob data ein gueltiges index.meta file ist, zur Zeit wird dom erzeugt ohne validierung.
159: @param data: zu testendes XML file als string
160: @return: zeiger auf dom falls ok, None andernfalls (z.Z: immmer dom falls parse possible)
161: """
162: try:
163: return xml.dom.minidom.parseString(xmlneu)
164: except:
165: return None
166:
167: security.declareProtected('View management screens','uploadExternalXMLString','uploadExternalXMLUrl','uploadExternalXML')
168:
169: def uploadExternalXMLString(self,index_meta_url,xml_string):
170: """lese ein xml file aus xml_url und schreibe es in den lokalen Filebaum
1.1 dwinter 171:
172: @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 173: @param xml_string: string mit index_meta ersetzt obiges index.meta
1.1 dwinter 174: @return: 'error' als String bei Fehler 'ok' bei ok.
175: """
1.2 dwinter 176:
177: return self.uploadExternalXML(index_meta_url,xml_string)
178:
179:
180: def uploadExternalXMLUrl(self,index_meta_url,xml_url):
181: """lese ein xml file aus xml_url und schreibe es in den lokalen Filebaum
1.1 dwinter 182:
1.2 dwinter 183: @param index_meta_url: url eines index.meta files auf dem lokalen Server, es gilt rootFolderName + pfad teil der url = pfad auf dem Server.
184: @param xml_url: externe url auf ein index_meta ersetzt obiges index.meta
185: @return: 'error' als String bei Fehler 'ok' bei ok.
186: """
187:
188: return self.uploadExternalXML(index_meta_url,xml_url)
1.1 dwinter 189:
1.2 dwinter 190:
191: def uploadExternalXML(self,index_meta_url,xml_url=None,xml_string=None):
192: """lese ein xml file aus xml_url und schreibe es in den lokalen Filebaum
1.1 dwinter 193:
1.2 dwinter 194: @param index_meta_url: url eines index.meta files auf dem lokalen Server, es gilt rootFolderName + pfad teil der url = pfad auf dem Server.
195: @param xml_url: (optional, default=None) externe url auf ein index_meta ersetzt obiges index.meta
196: @param xml_string: (optional, default=None) string mit index_meta ersetzt obiges index.meta
197: @return: 'error' als String bei Fehler 'ok' bei ok.
198: """
1.1 dwinter 199:
1.2 dwinter 200: if xml_url:
201: xmlneu=urllib.urlopen(xml_url).read()
202: else:
203: xmlneu=xml_string
204:
205: dom=self.validateIndexMeta(xmlneu)
206: if not dom:
1.1 dwinter 207: zLOG.LOG('OSAS_Root (downloadExternalXML)',zLOG.ERROR,'cannot parse: %s', xml_url)
208: return "error"
209:
210:
211: path=self.rootFolderName+urlparse(index_meta_url)[2]
212:
213: fh=open(path,'w')
214:
215: fh.write(xmlneu)
216: fh.close()
217: return "ok"
218:
1.2 dwinter 219: security.declareProtected('View','getIndexMetaFile')
220:
221:
222: def getIndexMetaFile(self,index_meta):
223: """gibt index metafile aus
224: @param index_meta: index_meta ist eine URI entweder url des index_meta oder file mit file://
225: """
226: filearray=[]
227: urlparsed=urlparse(index_meta)[1:]
228:
229: for x in urlparsed:
230:
231: if not (x==''):
232: filearray.append(x)
233:
234: path=os.sep.join(filearray)
235:
236: realPath=os.path.normpath(os.path.join(self.rootFolderName,path))
1.1 dwinter 237:
1.2 dwinter 238: if realPath.find(self.rootFolderName) <0: #versuch auf Pfad unterhalb des Rootfolder zuzugreifen
239: return {}
240:
241:
242: if not os.path.isfile(realPath):
243: return None,"(ERROR) path %s does not exist."%path
244:
245:
246: fh=file(realPath,'r')
247: str=fh.read()
248: fh.close()
249: return str
250:
251:
252: Globals.InitializeClass(OSAS_root)
253:
1.1 dwinter 254: def manage_addOSAS_rootForm(self):
255: """interface for adding the OSAS_root"""
256: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addOSAS_rootForm.zpt')).__of__(self)
257: return pt()
258:
1.4 dwinter 259: def manage_addOSAS_root(self,id,RootFolderName,uploadServletUrl,serverUrl,RESPONSE=None):
1.1 dwinter 260: """add the OSAS_root"""
1.4 dwinter 261: newObj=OSAS_root(id,RootFolderName,serverUrl,uploadServletUrl)
1.1 dwinter 262: self._setObject(id,newObj)
263: if RESPONSE is not None:
264: RESPONSE.redirect('manage_main')
265:
266:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>