Annotation of XMLRpcTools/XMLRpcTools.py, revision 1.5
1.1 dwinter 1:
2: from OFS.SimpleItem import SimpleItem
3: import xmlrpclib
1.5 ! casties 4: import httplib
1.1 dwinter 5: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
6: import os.path
7: from Globals import package_home
1.2 dwinter 8: import re
1.1 dwinter 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:
1.5 ! casties 19: def __init__(self,id,serverUrl,use_xmlrpc=True):
1.1 dwinter 20: """init server proxy"""
21: self.id=id
1.5 ! casties 22: self.serverUrl=serverUrl
! 23: self.use_xmlrpc = use_xmlrpc
! 24:
1.1 dwinter 25:
26: def ServerProxy(self,serverUrl=None):
27: """get the proxy"""
28: if not serverUrl:
29: serverUrl=self.serverUrl
30:
1.5 ! casties 31: if self.use_xmlrpc:
! 32: pr = xmlrpclib.ServerProxy(serverUrl)
! 33: else:
! 34: pr = httplib.HTTPConnection(serverUrl)
1.1 dwinter 35:
36: return pr
37:
1.5 ! casties 38:
1.1 dwinter 39: def eval(self,method,argument):
40: """do proxy request"""
1.5 ! casties 41: sr=self.ServerProxy()
1.1 dwinter 42:
1.5 ! casties 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')
1.1 dwinter 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:
1.5 ! casties 72: def mainConfig(self,serverUrl,use_xmlrpc=True,RESPONSE=None):
1.1 dwinter 73: """main config"""
74:
75: self.serverUrl=serverUrl
76:
1.5 ! casties 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
1.1 dwinter 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:
1.5 ! casties 93: def manage_addXMLRpcServerProxy(self,id,serverUrl,use_xmlrpc=True,RESPONSE=None):
1.1 dwinter 94: """add the basket"""
1.5 ! casties 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)
1.1 dwinter 101:
102: self._setObject(id, ob)
103:
104: if RESPONSE is not None:
105: RESPONSE.redirect('manage_main')
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>