1:
2: from OFS.SimpleItem import SimpleItem
3: import xmlrpclib
4: import httplib
5: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
6: import os.path
7: from Globals import package_home
8: import re
9:
10: class XMLRpcServerProxy(SimpleItem):
11: """makes servery proxy available for zope"""
12:
13: meta_type="XMLRpcServerProxy"
14:
15: manage_options= (
16: {'label':'Main Config','action':'mainConfigHTML'},
17: )+ SimpleItem.manage_options
18:
19: def __init__(self,id,serverUrl,use_xmlrpc=True):
20: """init server proxy"""
21: self.id=id
22: self.serverUrl=serverUrl
23: self.use_xmlrpc = use_xmlrpc
24:
25:
26: def ServerProxy(self,serverUrl=None):
27: """get the proxy"""
28: if not serverUrl:
29: serverUrl=self.serverUrl
30:
31: if self.use_xmlrpc:
32: pr = xmlrpclib.ServerProxy(serverUrl)
33: else:
34: pr = httplib.HTTPConnection(serverUrl)
35:
36: return pr
37:
38:
39: def eval(self,method,argument):
40: """do proxy request"""
41: sr=self.ServerProxy()
42:
43: if self.use_xmlrpc:
44: # for XML-RPC only letters are allowed
45: method=re.sub('[^A-z0-9]','',method)
46: argument=re.sub('[^A-z0-9]','',argument)
47:
48: mtstr="""sr.%s('%s')"""%(method,argument)
49:
50: return eval(mtstr)
51: else:
52: # HTTP
53: # TODO: check arguments
54: uri = method
55: if argument:
56: uri += '?' + argument
57:
58: #print "GET: ", uri
59: sr.request("GET", uri)
60: resp = sr.getresponse()
61: data = resp.read()
62: #print "GOT: ", resp.status, ", ", resp.reason, " = ", data
63:
64: return data.decode('UTF-8')
65:
66:
67: def mainConfigHTML(self):
68: """main config form"""
69: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','manageXMLRpcServerProxy.zpt')).__of__(self)
70: return pt()
71:
72: def mainConfig(self,serverUrl,use_xmlrpc=True,RESPONSE=None):
73: """main config"""
74:
75: self.serverUrl=serverUrl
76:
77: if use_xmlrpc and use_xmlrpc != "no":
78: use_xmlrpc = True
79: else:
80: use_xmlrpc = False
81:
82: self.use_xmlrpc=use_xmlrpc
83:
84: if RESPONSE:
85: RESPONSE.redirect("/manage_main")
86:
87:
88: def manage_addXMLRpcServerProxyForm(self):
89: """add the CXMLRpcServerProxy"""
90: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addXMLRpcServerProxy.zpt')).__of__(self)
91: return pt()
92:
93: def manage_addXMLRpcServerProxy(self,id,serverUrl,use_xmlrpc=True,RESPONSE=None):
94: """add the basket"""
95: if use_xmlrpc and use_xmlrpc != "no":
96: use_xmlrpc = True
97: else:
98: use_xmlrpc = False
99:
100: ob=XMLRpcServerProxy(id,serverUrl,use_xmlrpc)
101:
102: self._setObject(id, ob)
103:
104: if RESPONSE is not None:
105: RESPONSE.redirect('manage_main')
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>