Annotation of XMLRpcTools/XmlRpcProxy.py, revision 1.2
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:
1.2 ! casties 110: RESPONSE.redirect("manage_main")
1.1 casties 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>