Annotation of XMLRpcTools/XmlRpcProxy.py, revision 1.4

1.1       casties     1: 
                      2: from OFS.SimpleItem import SimpleItem
                      3: from OFS.Folder import Folder
                      4: from Globals import InitializeClass
                      5: import xmlrpclib
                      6: import httplib
                      7: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                      8: import os.path
                      9: from Globals import package_home
                     10: import re
                     11: import logging
                     12: 
                     13: class XmlRpcProxyFolder(Folder):
                     14:     """XML-RPC server proxy folder containing XmlRpcProxyMethods"""
                     15:     
                     16:     meta_type = 'XmlRpcProxyFolder'
                     17:     
                     18:     # base URL to the server
                     19:     serverUrl = None
                     20:     
                     21:     # server proxy object
                     22:     _v_proxy = None
                     23:     
                     24:     manage_options= Folder.manage_options + (
                     25:         {'label':'Main Config','action':'mainConfigForm'},
                     26:         )
                     27: 
                     28:     def __init__(self,id,serverUrl):
                     29:         """init server proxy"""
                     30:         self.id=id
                     31:         self.serverUrl=serverUrl
                     32:         
                     33:         
                     34:     def getProxy(self):
                     35:         """get the proxy"""
                     36:         if not self.serverUrl:
                     37:             return None
                     38:       
                     39:         # TODO cache proxy and add alive test
                     40:         self._v_proxy = xmlrpclib.ServerProxy(self.serverUrl)
                     41:        
                     42:         return self._v_proxy
                     43:         
                     44:     mainConfigForm = PageTemplateFile('zpt/manageXmlRpcProxyFolder',globals())
                     45:     
                     46:     def mainConfig(self,serverUrl,RESPONSE=None):
                     47:         """main config"""
                     48:         
                     49:         self.serverUrl=serverUrl
                     50:         
                     51:         if RESPONSE:
                     52:             RESPONSE.redirect("manage_main")
                     53:             
                     54: 
                     55: def manage_addXmlRpcProxyFolderForm(self):
                     56:     """add the XmlRpcProxyFolder"""
                     57:     pt=PageTemplateFile('zpt/addXmlRpcProxyFolder',globals()).__of__(self)
                     58:     return pt()
                     59: 
                     60: def manage_addXmlRpcProxyFolder(self,id,serverUrl,RESPONSE=None):
                     61:     """add the basket"""
                     62:     ob=XmlRpcProxyFolder(id,serverUrl)
                     63:     self._setObject(id, ob)
                     64:     
                     65:     if RESPONSE is not None:
                     66:         RESPONSE.redirect('manage_main')
                     67: 
                     68: 
                     69: 
                     70: class XmlRpcProxyMethod(SimpleItem):
                     71:     """XML-RPC server proxy method. the id is also the remote method name"""
                     72:     
                     73:     meta_type="XmlRpcProxyMethod"
                     74:     
                     75:     rpc_arg_expr='[^A-z0-9]'
                     76:     
                     77:     manage_options= (
                     78:         {'label':'Main Config','action':'mainConfigForm'},
                     79:         )+ SimpleItem.manage_options
                     80: 
                     81:     
                     82:     def __init__(self,id,rpc_arg_expr=None):
                     83:         """init server proxy"""
                     84:         self.id=id
                     85:         if rpc_arg_expr:
                     86:             self.rpc_arg_expr = rpc_arg_expr
                     87: 
                     88:     def eval(self,*argv):
                     89:         """do proxy request"""
                     90:         server=self.aq_parent.getProxy()
                     91: 
1.3       casties    92:         if self.rpc_arg_expr:
                     93:             # clean arguments
                     94:             args = [ re.sub(self.rpc_arg_expr,'',a) for a in argv]
1.4     ! casties    95:         else:
        !            96:             args = argv
1.1       casties    97:             
                     98:         # call the method self.id on the server with the args
                     99:         return getattr(server, self.id)(*args)
                    100:         
                    101:     __call__ = eval
                    102:     
                    103: 
                    104:     mainConfigForm = PageTemplateFile('zpt/manageXmlRpcProxyMethod',globals())
                    105:         
                    106:     def mainConfig(self,rpc_arg_expr=None,RESPONSE=None):
                    107:         """main config"""
                    108:                 
                    109:         if rpc_arg_expr is not None:
                    110:             self.rpc_arg_expr = rpc_arg_expr
                    111:         
                    112:         if RESPONSE:
1.2       casties   113:             RESPONSE.redirect("manage_main")
1.1       casties   114:             
                    115: 
                    116: def manage_addXmlRpcProxyMethodForm(self):
                    117:     """add the XmlRpcProxyFolder"""
                    118:     pt=PageTemplateFile('zpt/addXmlRpcProxyMethod',globals()).__of__(self)
                    119:     return pt()
                    120: 
                    121: def manage_addXmlRpcProxyMethod(self,id,rpc_arg_expr,RESPONSE=None):
                    122:     """add the basket"""
                    123:     ob=XmlRpcProxyMethod(id,rpc_arg_expr)
                    124:     self._setObject(id, ob)
                    125:     
                    126:     if RESPONSE is not None:
                    127:         RESPONSE.redirect('manage_main')
                    128: 
                    129: 
                    130: 
                    131: # init classes
                    132: InitializeClass(XmlRpcProxyFolder)
                    133: InitializeClass(XmlRpcProxyMethod)

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