xmlrpclib question

Eric Texier erict at millfilm.co.uk
Mon Jul 22 08:26:56 EDT 2002


I posted this question earlier but I am still confuse about what I am
doing wrong.
Why, in the class  'clientRootTask'   just taking out the 'if' statement
will make
it work:


.
.
if  serverp:
    serverp.SendTask(msg)
..
produce the error:
    raise apply(Fault, (), self._stack[0])
xmlrpclib.Fault: <Fault 1: 'exceptions.Exception:method "__nonzero__"
is not supported'>


When:
.
.
serverp.SendTask(msg)
..
will work just fine.

run the server:  python ServerCode.py

from python:
>>> from tempClient import *
>>> a = clientRootTask("junk")
>>> a.checking()

3 files involved:
dataAppTemp.py   :  some contant (you can set your local IP )
ServerCode.py        :  minimun rcpserver code
tempClient.py         : 2 classes defined
                - clientRootTask : a client
                - taskServer : an instnnce class for the server



ALL THE CODE INVOLVED

dataAppTemp.py:
##### PROTOCOL CLIENT/SERVER
KEYUSER = "USER"
KEYSHOW = "SHOW"
KEYSHOT = "SHOT"
KEYCONTENT = "CONTENT"

OK = "OK"
CANCEL = "CANCEL"

####
SERVER_IP_ADDR = "10.16.3.132"
SERVER_PORT = 8000


ServerCode.py:
################################
################################
import sys
import os
import time
import socket
import SimpleXMLRPCServer
import string
#####
import dataAppTemp
import tempClient
############
## Task Handler
############
class taskRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):

    def _dispatch( self, method, params ):
        ip, port = self.client_address
        print "in dispatch",ip
        return
SimpleXMLRPCServer.SimpleXMLRPCRequestHandler._dispatch(self,

method,

params)


########
if __name__== "__main__":

    server = SimpleXMLRPCServer.SimpleXMLRPCServer
((dataAppTemp.SERVER_IP_ADDR,

dataAppTemp.SERVER_PORT),
                                                    taskRequestHandler)
    server.register_instance(tempClient.taskServer(server))
    server.serve_forever()


In tempClient.py
################################
################################
import os
import xmlrpclib
import types
#####
import dataAppTemp

################################
class clientRootTask:
    ##################
    def __init__(self,aname):
        self.name = aname

    ##################
    def getConnection(self):
        print "try to connect to the server"
        server = None
        try:
            server = xmlrpclib.ServerProxy(
                "http://%s:%d" % (dataAppTemp.SERVER_IP_ADDR,
                                  dataAppTemp.SERVER_PORT))
            print "Connected to the server..."
        except:
            print "Cannot connect"
            server = None

        return server


    ##################
    def checking(self):
        import string
        msg = {}
        msg[dataAppTemp.KEYSHOW]= "MYSHOW"
        msg[dataAppTemp.KEYSHOT]= "MYSHOT"
        if os.environ.has_key('USER'):
            msg[dataAppTemp.KEYUSER] = os.environ['USER']


        print msg
        serverp = self.getConnection()

        print "SERVER PROXY %s" % serverp

        if serverp:
            serverp.SendTask(msg)

        return 1

####################################################
### taskServer
####################################################
class taskServer:
    ##################
    def __init__(self,server):
        print "IN INIT SERVER TASK"
        self.server = server

    ##################
    def SendTask(self,msg):
        print "getting message"
        if type(msg) != types.DictType:
            print "Wrong type of msg"
            return dataAppTemp.CANCEL
        if msg.has_key(dataAppTemp.KEYSHOW):
            print "Show",msg[dataAppTemp.KEYSHOW]
        if msg.has_key(dataAppTemp.KEYSHOT):
            print "Shot",msg[dataAppTemp.KEYSHOT]
        if msg.has_key(dataAppTemp.KEYUSER):
            print "From user",msg[dataAppTemp.KEYUSER]


        return dataAppTemp.OK






More information about the Python-list mailing list