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