File:  [Repository] / XMLRpcTools / XMLRpcTools.py
Revision 1.5: download - view: text, annotated - select for diffs - revision graph
Wed Mar 21 18:26:55 2007 UTC (17 years, 3 months ago) by casties
Branches: MAIN
CVS tags: HEAD
new version also does plain html requests

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

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