sorry i am bothering you so much and i really appreciate your help.

This is what i am trying to do (and i guess it now fits in with what i am 
asking in the post about logging - 
https://groups.google.com/forum/?fromgroups=#!topic/rpyc/BFVMbUS-gtg). 
Rather than passing the logging instance to each exposed method, i want to 
know if i can pass it to the on_connect method and then access it directly 
from there.

The reason for this is that there will be a whole mountain of 
infrastructure code sitting on the server side that i will access via the 
server (which from my point of view is only an entry point with a link to 
the main code. ie - i have an exposed_property called infrastructure that 
returns an instance of the Tester and i will access methods in the 
infrastructure on the server from the client via the command: 
client_connection.root.infrastructure.do_something().

I know that there are other ways of doing this but I wanted to have the 
logger at the on_connect stage so i could pass it directly to the 
infrastructure at construction (on_connect).

thanks again

On Sunday, September 2, 2012 10:38:44 PM UTC+3, Tomer Filiba wrote:
>
> then don't use the server's logger. this logger is only meant for 
> debugging/diagnostic purposes. if you want to log to a certain logger, just 
> create it on the client and pass it on to the server. for instance:
>
> === client ===
> import logging
> logging.basicConfig(file="/tmp/foo.log")
> mylogger = logging.getLogger("my oh my")
>
> conn.root.do_something(1, 2, 3, logger = mylogger)
>
> === server ===
> class MyService(rpyc.Service):
>     def exposed_do_something(self, a, b, c, logger):
>         logger.info("foo bar")
>         return a*b*c
>
>
> -----------------------------------------------------------------
>     
> *Tomer Filiba* 
> tomerfiliba.com     <http://www.facebook.com/tomerfiliba>    
> <http://il.linkedin.com/in/tomerfiliba> 
>
>
>
> On Sun, Sep 2, 2012 at 7:48 PM, ben <[email protected] <javascript:>>wrote:
>
>> Hi Tomer,
>>
>> Thanks for the quick reply.
>>
>> As for number 1 - that explains why i was having trouble with passing 
>> classes backwards and forwards, thanks for the clarification.
>>
>> As for number 2 - i am writing an automated testing environment (ie, 
>> diagnostic testing) where some of the work will be done on the tester's 
>> machine (where the log instance will be created and where the log file will 
>> be stored) but i am hoping for the majority of the work to be done on the 
>> server machines (using RPyC to call methods on the server and pass classes 
>> and paramaters backwards and forwards). In the previous automation 
>> environment, everything was done via rpc calls from the tester's machine 
>> with our log being the main point of reference to determine success and 
>> failure as well as identifying errors in the source code. So, it is not 
>> simply to log exceptions. Ideally i would like to be able to pass the 
>> initial logging instance created on the tester's machine to each of the 
>> servers at the time the client's connection is made and get all logging 
>> from all servers in one centralized location at the conclusion of each test.
>>
>> is that even possible with RPyC? 
>>
>> either way, to access the logger on the server(assuming i understood 
>> correctly from your response), i pass the logging instance as part of the 
>> config_dict at connection from the client to the server. On the server 
>> side, i do not have to set logger equal to anything and i will be able to 
>> access it via self.._config["logger"].
>>
>> thanks again for your help
>>
>> ben
>>
>>
>> On Sunday, September 2, 2012 2:53:58 PM UTC+3, Tomer Filiba wrote:
>>
>>> 1) it depends on you. the client and server's services are decoupled; 
>>> you can connect a VoidService client to a MyService server, which only 
>>> means the server won't be able to invoke functions on the client. on the 
>>> other hand, if you pass an object from the client to the server, the server 
>>> will be able to use it. what will it be able to use - depends on the 
>>> config. by default, only `exposed_` attributes and "safe" magic methods are 
>>> allowed, but you can change it via the configuration.
>>>
>>> 2) if you're using the classic rpyc (SlaveService), you can use 
>>> conn.root.getconn()<http://rpyc.sourceforge.net/api/core_service.html#rpyc.core.service.SlaveService.exposed_getconn>,
>>>  
>>> which returns the other party's connection. from this connection, you can 
>>> dig up ._config["logger"] to get hold of the logger instance. if you're not 
>>> using classic mode, you can implement an exposed method, say 
>>> exposed_get_logger, to do the trick. anyway, why do you need to get the 
>>> other party's logger? loggers are normally configured once and then used by 
>>> the server to log exceptions - it's for diagnostic purposes, not everyday 
>>> use.
>>>
>>> ------------------------------**------------------------------**-----
>>>      
>>> *Tomer Filiba* 
>>> tomerfiliba.com     <http://www.facebook.com/tomerfiliba>    
>>> <http://il.linkedin.com/in/tomerfiliba> 
>>>
>>>
>>>
>>> On Sun, Sep 2, 2012 at 2:15 PM, ben <[email protected]> wrote:
>>>
>>>> I have a class that inherits from *rpyc.Service* (lets call it 
>>>> MyService) and i initiate a server via the command 
>>>> *rpyc.utils.server.ThreadServer(MyServer, 
>>>> port)*.
>>>>
>>>> I start the server and then connect to it from the client using the 
>>>> command: rpyc.connect(server_ip, port).
>>>>
>>>> I now have 2 questions:
>>>> 1) if i add/change default params in the config_dict, do i need to add 
>>>> them on both the client and server end?
>>>> 2) if i add a logger instance at the client end via the key 'logger', 
>>>> how do i access it at the server end? do i have to add something to the 
>>>> "on_connect" method of MyService?
>>>>
>>>> thx
>>>>
>>>
>>>
>

Reply via email to