Welcome, guest | Sign In | My Account | Store | Cart
# xmlrpc_server.py
from socket import gethostname
from medusa.xmlrpc_handler import xmlrpc_handler
from medusa.http_server import http_server
from medusa import asyncore

class xmlrpc_server(xmlrpc_handler):
    """The xmlrpc_server class demonstrates a simple implementation 
    of Userland's XML-RPC protocol.  You must download and install
    xmlrpclib and Medusa to run this code.

    Obtain Sam Rushing's Medusa library from http://www.nightmare.com
    Download Fredrik Lundh's xmlrpclib at http://www.pythonware.com"""

    def __init__(self, host=None, port=8182):
        if host is None:
            host = gethostname()
        hs = http_server(host, port)
        hs.install_handler(self)
        asyncore.loop()

    def add(self, op1, op2):
        return op1 + op2

    def call(self, method, params):
        print "call method: %s, params: %s" % (method, str(params))
        if method == 'add':
            return apply(self.add, params)
        return "method not found: %s" % method

if __name__ == '__main__':
    server = xmlrpc_server()

---

# xmlrpc_client.py
from socket import gethostname
from xmlrpclib import Transport, dumps

class xmlrpc_connection:
    """The xmlrpc_connection class tests the xmlrpc_server.  You must 
    download and install the medusa and xmlrpclib libraries to run 
    this code:  http://www.nightmare.com  http://www.pythonware.com"""

    def __init__(self, host=None, port=8182):
        if host is None:
            host = gethostname()
        self.host = "%s:%s" % (host, port)
        self.transport = Transport()

    def remote(self, method, params=()):
        """remote invokes the server with the method name and an 
        optional set of parameters.  The return value is always a
        tuple."""

        response = self.transport.request(self.host, 
                                          '/RPC2',
                                          dumps(params, method))
        return response

if __name__ == '__main__':
    connection = xmlrpc_connection()
    (answer,) = connection.remote("add", (40, 2))
    print "The answer is:", answer

History