Annotation of XMLRpcTools/XMLRpcTools.py, revision 1.10

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:     
1.6       casties    15:     rpc_arg_expr='[^A-z0-9]'
                     16:     
1.1       dwinter    17:     manage_options= (
                     18:         {'label':'Main Config','action':'mainConfigHTML'},
                     19:         )+ SimpleItem.manage_options
                     20: 
1.5       casties    21:     def __init__(self,id,serverUrl,use_xmlrpc=True):
1.1       dwinter    22:         """init server proxy"""
                     23:         self.id=id
1.5       casties    24:         self.serverUrl=serverUrl
                     25:         self.use_xmlrpc = use_xmlrpc
                     26:         
1.1       dwinter    27:         
                     28:     def ServerProxy(self,serverUrl=None):
                     29:         """get the proxy"""
                     30:         if not serverUrl:
                     31:             serverUrl=self.serverUrl
                     32:       
1.5       casties    33:         if self.use_xmlrpc:
                     34:             pr = xmlrpclib.ServerProxy(serverUrl)
                     35:         else:
                     36:             pr = httplib.HTTPConnection(serverUrl)
1.1       dwinter    37:        
                     38:         return pr
                     39:     
1.5       casties    40:     
1.1       dwinter    41:     def eval(self,method,argument):
                     42:         """do proxy request"""
1.6       casties    43:         server=self.ServerProxy()
1.1       dwinter    44:         
1.5       casties    45:         if self.use_xmlrpc:
1.6       casties    46:             # for XML-RPC methods only letters are allowed
1.7       casties    47:             method=re.sub('[^A-z0-9_]','',method)
1.6       casties    48:             # clean argument
                     49:             argument=re.sub(self.rpc_arg_expr,'',argument)
1.5       casties    50:             
1.6       casties    51:             cmd="""server.%s('%s')"""%(method,argument)
1.5       casties    52:            
1.6       casties    53:             return eval(cmd)
1.5       casties    54:         else:
                     55:             # HTTP
                     56:             # TODO: check arguments
                     57:             uri = method
                     58:             if argument:
                     59:                 uri += '?' + argument
                     60:             
                     61:             #print "GET: ", uri
1.6       casties    62:             server.request("GET", uri)
                     63:             resp = server.getresponse()
1.5       casties    64:             data = resp.read()
                     65:             #print "GOT: ", resp.status, ", ", resp.reason, " = ", data
                     66:             
                     67:             return data.decode('UTF-8')
1.1       dwinter    68:         
1.8       casties    69:     def eval2(self,method,argument1,argument2):
                     70:         """do proxy request"""
                     71:         server=self.ServerProxy()
                     72:         
                     73:         if self.use_xmlrpc:
                     74:             # for XML-RPC methods only letters are allowed
                     75:             method=re.sub('[^A-z0-9_]','',method)
                     76:             # clean argument
                     77:             argument1=re.sub(self.rpc_arg_expr,'',argument1)
                     78:             argument2=re.sub(self.rpc_arg_expr,'',argument2)
                     79:             
1.9       casties    80:             cmd="""server.%s('%s','%s')"""%(method,argument1,argument2)
1.8       casties    81:            
                     82:             return eval(cmd)
                     83:         else:
                     84:             # HTTP
                     85:             # TODO: check arguments
                     86:             uri = method
                     87:             if argument1:
                     88:                 uri += '?' + argument1 + argument2
                     89:             
                     90:             #print "GET: ", uri
                     91:             server.request("GET", uri)
                     92:             resp = server.getresponse()
                     93:             data = resp.read()
                     94:             #print "GOT: ", resp.status, ", ", resp.reason, " = ", data
                     95:             
                     96:             return data.decode('UTF-8')
                     97:         
1.1       dwinter    98:     
                     99:     def mainConfigHTML(self):
                    100:         """main config form"""
                    101:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','manageXMLRpcServerProxy.zpt')).__of__(self)
                    102:         return pt()
                    103:     
1.6       casties   104:     def mainConfig(self,serverUrl,use_xmlrpc=True,rpc_arg_expr=None,RESPONSE=None):
1.1       dwinter   105:         """main config"""
                    106:         
                    107:         self.serverUrl=serverUrl
                    108:         
1.5       casties   109:         if use_xmlrpc and use_xmlrpc != "no":
                    110:             use_xmlrpc = True
                    111:         else:
                    112:             use_xmlrpc = False
                    113:         
                    114:         self.use_xmlrpc=use_xmlrpc
1.1       dwinter   115:         
1.6       casties   116:         if rpc_arg_expr is not None:
                    117:             self.rpc_arg_expr = rpc_arg_expr
                    118:         
1.1       dwinter   119:         if RESPONSE:
1.10    ! casties   120:             RESPONSE.redirect("manage_main")
1.1       dwinter   121:             
                    122: 
                    123: def manage_addXMLRpcServerProxyForm(self):
                    124:     """add the CXMLRpcServerProxy"""
                    125:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addXMLRpcServerProxy.zpt')).__of__(self)
                    126:     return pt()
                    127: 
1.6       casties   128: def manage_addXMLRpcServerProxy(self,id,serverUrl,use_xmlrpc=True,rpc_arg_expr=None,RESPONSE=None):
1.1       dwinter   129:     """add the basket"""
1.5       casties   130:     if use_xmlrpc and use_xmlrpc != "no":
                    131:         use_xmlrpc = True
                    132:     else:
                    133:         use_xmlrpc = False
                    134:         
1.6       casties   135:     if rpc_arg_expr is not None:
                    136:         self.rpc_arg_expr = rpc_arg_expr
                    137:         
1.5       casties   138:     ob=XMLRpcServerProxy(id,serverUrl,use_xmlrpc)
1.1       dwinter   139:     
                    140:     self._setObject(id, ob)
                    141:     
                    142:     if RESPONSE is not None:
1.10    ! casties   143:         RESPONSE.redirect('manage_main')
        !           144:         

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>