from OFS.SimpleItem import SimpleItem import xmlrpclib from Products.PageTemplates.PageTemplateFile import PageTemplateFile import os.path from Globals import package_home class XMLRpcServerProxy(SimpleItem): """makes servery proxy available for zope""" meta_type="XMLRpcServerProxy" manage_options= ( {'label':'Main Config','action':'mainConfigHTML'}, )+ SimpleItem.manage_options def __init__(self,id,serverUrl): """init server proxy""" self.id=id self.serverUrl=id def ServerProxy(self,serverUrl=None): """get the proxy""" if not serverUrl: serverUrl=self.serverUrl pr=xmlrpclib.ServerProxy(serverUrl) return pr def eval(self,method,argument): """do proxy request""" #only letters are allowed method=re.sub('[^A-z]','',method) argument=re.sub('[^A-z]','',argument) sr=self.ServerProxy() mtstr="""sr.%s('%s')"""%(method,argument) return eval(mtstr) def mainConfigHTML(self): """main config form""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','manageXMLRpcServerProxy.zpt')).__of__(self) return pt() def mainConfig(self,serverUrl,RESPONSE=None): """main config""" self.serverUrl=serverUrl if RESPONSE: RESPONSE.redirect("/manage_main") def manage_addXMLRpcServerProxyForm(self): """add the CXMLRpcServerProxy""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addXMLRpcServerProxy.zpt')).__of__(self) return pt() def manage_addXMLRpcServerProxy(self,id,serverUrl,RESPONSE=None): """add the basket""" ob=XMLRpcServerProxy(id,serverUrl) self._setObject(id, ob) if RESPONSE is not None: RESPONSE.redirect('manage_main')