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>