[Tutor] Doubt in RPC XML lib

Varun Soundararajan s.varun at gmail.com
Mon Sep 13 18:42:10 CEST 2004


cool,
any other comment/ like general prog structural changes, and any
programming style changes that i shd do?
-Varun

On Mon, 13 Sep 2004 08:20:26 -0400, Kent Johnson
<kent_johnson at skillsoft.com> wrote:
> Varun,
> 
> You can use eval() or getattr() to do what you want. For example, with your
> server running on port 8000, I can do this:
>  >>> import xmlrpclib
>  >>> server = xmlrpclib.ServerProxy('http://localhost:8000')
>  >>> server.system.listMethods()
> ['add', 'pow', 'system.listMethods', 'system.methodHelp',
> 'system.methodSignature']
>  >>> server.add(1, 2)
> 3
>  >>> eval('server.add(1, 2)')
> 3
>  >>> getattr(server, 'add')(1,2)
> 3
> 
> I suggest you change your data structure to hold the actual server object
> and the names of the methods. Then you can use getattr to get the function
> object from the server and call it.
> 
> I would create a list of (server, list of functions) where server is the
> actual server object, i.e. something like
> servers = [ (server1, ['add', 'pow']), (server2, ['foo', 'bar']) ]
> 
> Then given serverNum, funcNum and args you can do
> server, funcNames = servers[serverNum]
> funcName = funcNames[funcNum]
> getattr(server, funcName)(args)
> 
> By the way instead of
>          for host in range(0,len(self.alivehosts)):
>              hostname="http://"+self.alivehosts[host]+":8000"
> 
> you can say
>          for host in self.alivehosts:
>              hostname="http://"+host+":8000"
> 
> Kent
> 
> 
> 
> At 05:08 PM 9/13/2004 +0530, Varun Soundararajan wrote:
> >I hv attached the two files. Actually what i am trying to do is that,
> >i replicate the gethosts.py and servers.py code in every system. in
> >every system when i start my python code, i check all servers of the
> >same type and add to my active hosts list. ( i do taht in gethosts.py)
> >in the servers.py, i serve my own server at 10001 and rpc server at
> >8000 using thread. My server at 10001 authenticates with other server
> >of my type by sending some hashed data and getting it back (just to
> >ensure that i am not adding some other server listening at 10001).
> >Now my qn is,
> >if i want to access a code i call:
> >server.somefunction()
> >now since i have the list of functions of form (['1.fn1',
> >'1.fn2','2.fn1' etc] ) when i want to call the fn1 of server 0 i shd
> >call
> >hosts_server_access[0].fn1() . but i want the user to choose that. Now
> >how do i do that.
> >in other words.
> >if i wanna call fn1 of server 0 i shd be able to call(say)
> >hosts_server_access[0][1]() or something like that.
> >pls help
> >thanks in advance
> >-Varun
> >
> >
> >_______________________________________________
> >Tutor maillist  -  Tutor at python.org
> >http://mail.python.org/mailman/listinfo/tutor
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list