Annotation of XMLRpcTools/XmlRpcProxy.py, revision 1.1
1.1 ! casties 1:
! 2: from OFS.SimpleItem import SimpleItem
! 3: from OFS.Folder import Folder
! 4: from Globals import InitializeClass
! 5: import xmlrpclib
! 6: import httplib
! 7: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
! 8: import os.path
! 9: from Globals import package_home
! 10: import re
! 11: import logging
! 12:
! 13: class XmlRpcProxyFolder(Folder):
! 14: """XML-RPC server proxy folder containing XmlRpcProxyMethods"""
! 15:
! 16: meta_type = 'XmlRpcProxyFolder'
! 17:
! 18: # base URL to the server
! 19: serverUrl = None
! 20:
! 21: # server proxy object
! 22: _v_proxy = None
! 23:
! 24: manage_options= Folder.manage_options + (
! 25: {'label':'Main Config','action':'mainConfigForm'},
! 26: )
! 27:
! 28: def __init__(self,id,serverUrl):
! 29: """init server proxy"""
! 30: self.id=id
! 31: self.serverUrl=serverUrl
! 32:
! 33:
! 34: def getProxy(self):
! 35: """get the proxy"""
! 36: if not self.serverUrl:
! 37: return None
! 38:
! 39: # TODO cache proxy and add alive test
! 40: self._v_proxy = xmlrpclib.ServerProxy(self.serverUrl)
! 41:
! 42: return self._v_proxy
! 43:
! 44: mainConfigForm = PageTemplateFile('zpt/manageXmlRpcProxyFolder',globals())
! 45:
! 46: def mainConfig(self,serverUrl,RESPONSE=None):
! 47: """main config"""
! 48:
! 49: self.serverUrl=serverUrl
! 50:
! 51: if RESPONSE:
! 52: RESPONSE.redirect("manage_main")
! 53:
! 54:
! 55: def manage_addXmlRpcProxyFolderForm(self):
! 56: """add the XmlRpcProxyFolder"""
! 57: pt=PageTemplateFile('zpt/addXmlRpcProxyFolder',globals()).__of__(self)
! 58: return pt()
! 59:
! 60: def manage_addXmlRpcProxyFolder(self,id,serverUrl,RESPONSE=None):
! 61: """add the basket"""
! 62: ob=XmlRpcProxyFolder(id,serverUrl)
! 63: self._setObject(id, ob)
! 64:
! 65: if RESPONSE is not None:
! 66: RESPONSE.redirect('manage_main')
! 67:
! 68:
! 69:
! 70: class XmlRpcProxyMethod(SimpleItem):
! 71: """XML-RPC server proxy method. the id is also the remote method name"""
! 72:
! 73: meta_type="XmlRpcProxyMethod"
! 74:
! 75: rpc_arg_expr='[^A-z0-9]'
! 76:
! 77: manage_options= (
! 78: {'label':'Main Config','action':'mainConfigForm'},
! 79: )+ SimpleItem.manage_options
! 80:
! 81:
! 82: def __init__(self,id,rpc_arg_expr=None):
! 83: """init server proxy"""
! 84: self.id=id
! 85: if rpc_arg_expr:
! 86: self.rpc_arg_expr = rpc_arg_expr
! 87:
! 88: def eval(self,*argv):
! 89: """do proxy request"""
! 90: server=self.aq_parent.getProxy()
! 91:
! 92: # clean arguments
! 93: args = [ re.sub(self.rpc_arg_expr,'',a) for a in argv]
! 94:
! 95: # call the method self.id on the server with the args
! 96: return getattr(server, self.id)(*args)
! 97:
! 98: __call__ = eval
! 99:
! 100:
! 101: mainConfigForm = PageTemplateFile('zpt/manageXmlRpcProxyMethod',globals())
! 102:
! 103: def mainConfig(self,rpc_arg_expr=None,RESPONSE=None):
! 104: """main config"""
! 105:
! 106: if rpc_arg_expr is not None:
! 107: self.rpc_arg_expr = rpc_arg_expr
! 108:
! 109: if RESPONSE:
! 110: RESPONSE.redirect("/manage_main")
! 111:
! 112:
! 113: def manage_addXmlRpcProxyMethodForm(self):
! 114: """add the XmlRpcProxyFolder"""
! 115: pt=PageTemplateFile('zpt/addXmlRpcProxyMethod',globals()).__of__(self)
! 116: return pt()
! 117:
! 118: def manage_addXmlRpcProxyMethod(self,id,rpc_arg_expr,RESPONSE=None):
! 119: """add the basket"""
! 120: ob=XmlRpcProxyMethod(id,rpc_arg_expr)
! 121: self._setObject(id, ob)
! 122:
! 123: if RESPONSE is not None:
! 124: RESPONSE.redirect('manage_main')
! 125:
! 126:
! 127:
! 128: # init classes
! 129: InitializeClass(XmlRpcProxyFolder)
! 130: InitializeClass(XmlRpcProxyMethod)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>