Annotation of OSA_system2/OSAS_root.py, revision 1.3

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.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>