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>