File:  [Repository] / OSA_system2 / OSAS_root.py
Revision 1.5: download - view: text, annotated - select for diffs - revision graph
Thu Mar 3 20:41:00 2005 UTC (19 years, 3 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
major new version

    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: """
    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
   21: import Globals
   22: from Globals import package_home
   23: from AccessControl import ClassSecurityInfo
   24: 
   25: 
   26: class OSAS_handlerObject(Folder):
   27:     """
   28:     Grundlegende Klasse fuer Handler zur Zeit noch in Entwicklung
   29: 
   30:     """
   31:     meta_type="OSAS_HandlerObject__neu"
   32: 
   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 Handlers 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':'changeHandlerObjectForm'},
   52:         )
   53: 
   54:     def changeHandlerObjectForm(self):
   55:         """Main configuration"""
   56:         pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeHandlerObjectForm.zpt')).__of__(self)
   57:         return pt()
   58: 
   59:     def changeHandlerObject(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_addHandlerObjectForm(self):
   71:     """form for adding a handler Object"""
   72:     pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','addHandlerObjectForm.zpt')).__of__(self)
   73:     return pt()
   74: 
   75: def manage_addHandlerObject(self,id,title,prefix,objectTypes,ignorePath,RESPONSE=None):
   76:     """add the OSAS_root"""
   77:     newObj=OSAS_handlerObject(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"""
   86: 
   87:     security=ClassSecurityInfo()
   88: 
   89:     def __init__(self,id,rootFolderName,serverUrl,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:         self.serverUrl=serverUrl
  103:     meta_type="OSAS_Root"
  104: 
  105:     manage_options = Folder.manage_options+(
  106:         {'label':'Main Config','action':'changeRootForm'},
  107:         )
  108: 
  109: 
  110:     OSASObjectTypes=OSAS_helpers.OSASObjectTypes
  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)
  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: 
  141:     def changeRoot(self,rootFolderName,uploadServletUrl,serverUrl,RESPONSE=None):
  142:         """Change RootFolderName"""
  143:         self.rootFolderName=rootFolderName
  144:         self.serverUrl=serverUrl
  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: 
  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
  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. 
  173:         @param xml_string: string mit index_meta ersetzt obiges index.meta
  174:         @return: 'error' als String bei Fehler 'ok' bei ok.
  175:         """
  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
  182:         
  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)
  189: 
  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
  193:         
  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:         """
  199: 
  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:
  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: 
  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))
  237:         
  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: 
  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: 
  259: def manage_addOSAS_root(self,id,RootFolderName,uploadServletUrl,serverUrl,RESPONSE=None):
  260:     """add the OSAS_root"""
  261:     newObj=OSAS_root(id,RootFolderName,serverUrl,uploadServletUrl)
  262:     self._setObject(id,newObj)
  263:     if RESPONSE is not None:
  264:         RESPONSE.redirect('manage_main')
  265: 
  266:     

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>