Pascal Peregrina wrote at 2005-6-27 11:53 +0200:
I just finished reading xmlrpclib.py and ZopeProfiler code.
Here is the root cause of the issue :
In my code : getattr(ServerProxy(self.url),self.rpc_method_expr) returns an xmlrpclib._Method object
Then ZopeProfiler calls ZopeProfiler.ZopeProfiler.getHLFuncId(self,fn,frame), which contains: gP= getattr(s,'getPhysicalPath',None)
So this calls xmlrpclib._Method.__getattr__, which is: def __getattr__(self, name): return _Method(self.__send, "%s.%s" % (self.__name, name))
So this returns another xmlrpclib._Method object for a "getPhysicalPath" RPC method
Because gP is not None, ZopeProfiler then does : p= gP()
And this makes an RPC method call on the service, and of course raises an Exception !
Nice analysis!
So for my tests I hacked xmlrpclib._Method.__getattr__ to return None for 'getPhysicalPath' : def __getattr__(self, name): if name=='getPhysicalPath': return None return _Method(self.__send, "%s.%s" % (self.__name, name))
You can do this easier: from xmlrpclib import _Method _Method.getPhysicalPath = None Of course, any way, you will loose the possibility to call "getPhysicalPath" via "XML-RPC".
But a real fix will be needed on ZopeProfiler !
Try the attached patch. -- Dieter