|
|
| version 1.2, 2006/11/14 21:15:44 | version 1.7, 2007/10/22 18:34:35 |
|---|---|
| Line 1 | Line 1 |
| from OFS.SimpleItem import SimpleItem | from OFS.SimpleItem import SimpleItem |
| import xmlrpclib | import xmlrpclib |
| import httplib | |
| from Products.PageTemplates.PageTemplateFile import PageTemplateFile | from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
| import os.path | import os.path |
| from Globals import package_home | from Globals import package_home |
| Line 11 class XMLRpcServerProxy(SimpleItem): | Line 12 class XMLRpcServerProxy(SimpleItem): |
| meta_type="XMLRpcServerProxy" | meta_type="XMLRpcServerProxy" |
| rpc_arg_expr='[^A-z0-9]' | |
| manage_options= ( | manage_options= ( |
| {'label':'Main Config','action':'mainConfigHTML'}, | {'label':'Main Config','action':'mainConfigHTML'}, |
| )+ SimpleItem.manage_options | )+ SimpleItem.manage_options |
| def __init__(self,id,serverUrl): | def __init__(self,id,serverUrl,use_xmlrpc=True): |
| """init server proxy""" | """init server proxy""" |
| self.id=id | self.id=id |
| self.serverUrl=id | self.serverUrl=serverUrl |
| self.use_xmlrpc = use_xmlrpc | |
| def ServerProxy(self,serverUrl=None): | def ServerProxy(self,serverUrl=None): |
| """get the proxy""" | """get the proxy""" |
| if not serverUrl: | if not serverUrl: |
| serverUrl=self.serverUrl | serverUrl=self.serverUrl |
| if self.use_xmlrpc: | |
| pr=xmlrpclib.ServerProxy(serverUrl) | pr=xmlrpclib.ServerProxy(serverUrl) |
| else: | |
| pr = httplib.HTTPConnection(serverUrl) | |
| return pr | return pr |
| def eval(self,method,argument): | def eval(self,method,argument): |
| """do proxy request""" | """do proxy request""" |
| #only letters are allowed | server=self.ServerProxy() |
| method=re.sub('[^A-z]','',method) | |
| argument=re.sub('[^A-z]','',argument) | |
| sr=self.ServerProxy() | if self.use_xmlrpc: |
| mtstr="""sr.%s('%s')"""%(method,argument) | # for XML-RPC methods only letters are allowed |
| method=re.sub('[^A-z0-9_]','',method) | |
| # clean argument | |
| argument=re.sub(self.rpc_arg_expr,'',argument) | |
| cmd="""server.%s('%s')"""%(method,argument) | |
| return eval(cmd) | |
| else: | |
| # HTTP | |
| # TODO: check arguments | |
| uri = method | |
| if argument: | |
| uri += '?' + argument | |
| #print "GET: ", uri | |
| server.request("GET", uri) | |
| resp = server.getresponse() | |
| data = resp.read() | |
| #print "GOT: ", resp.status, ", ", resp.reason, " = ", data | |
| return data.decode('UTF-8') | |
| return eval(mtstr) | |
| def mainConfigHTML(self): | def mainConfigHTML(self): |
| """main config form""" | """main config form""" |
| pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','manageXMLRpcServerProxy.zpt')).__of__(self) | pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','manageXMLRpcServerProxy.zpt')).__of__(self) |
| return pt() | return pt() |
| def mainConfig(self,serverUrl,RESPONSE=None): | def mainConfig(self,serverUrl,use_xmlrpc=True,rpc_arg_expr=None,RESPONSE=None): |
| """main config""" | """main config""" |
| self.serverUrl=serverUrl | self.serverUrl=serverUrl |
| if use_xmlrpc and use_xmlrpc != "no": | |
| use_xmlrpc = True | |
| else: | |
| use_xmlrpc = False | |
| self.use_xmlrpc=use_xmlrpc | |
| if rpc_arg_expr is not None: | |
| self.rpc_arg_expr = rpc_arg_expr | |
| if RESPONSE: | if RESPONSE: |
| RESPONSE.redirect("/manage_main") | RESPONSE.redirect("/manage_main") |
| Line 61 def manage_addXMLRpcServerProxyForm(self | Line 96 def manage_addXMLRpcServerProxyForm(self |
| pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addXMLRpcServerProxy.zpt')).__of__(self) | pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addXMLRpcServerProxy.zpt')).__of__(self) |
| return pt() | return pt() |
| def manage_addXMLRpcServerProxy(self,id,serverUrl,RESPONSE=None): | def manage_addXMLRpcServerProxy(self,id,serverUrl,use_xmlrpc=True,rpc_arg_expr=None,RESPONSE=None): |
| """add the basket""" | """add the basket""" |
| ob=XMLRpcServerProxy(id,serverUrl) | if use_xmlrpc and use_xmlrpc != "no": |
| use_xmlrpc = True | |
| else: | |
| use_xmlrpc = False | |
| if rpc_arg_expr is not None: | |
| self.rpc_arg_expr = rpc_arg_expr | |
| ob=XMLRpcServerProxy(id,serverUrl,use_xmlrpc) | |
| self._setObject(id, ob) | self._setObject(id, ob) |