[Twisted-Python] spread: differences between remote_ and perspective_ needing an explanation

Wolfgang Rohdewald wolfgang.kde at rohdewald.de
Sat Oct 11 15:30:56 MDT 2014


Hi,

while trying to isolate a bug in my app, I found some strange
differences between the implementations of remote_* and perspective_*.

1. in pb.Broker.serialize(), those attributes are set and restored:
   jellyMethod, jellyArgs, jellyKw. Within twisted
   Those attributes are not used anywhere. I grepped, and I ran the
   test suite without those. Is there some code outside of twisted
   using this? What for? Or is there a need for avoiding garbage
   collection? (which would need some explanation).

   My theory is that it was forgotten to remove them when doing
   svn commit 1448: Before, they were actually used in 
   _NetJellier._jelly_instance, but no more after this commit.


2. Those implementations differ:
	remote_*: return broker.serialize(state, self.perspective)
   	perspective_*: return broker.serialize(state, self, method, args, kw)
   	view_*: return broker.serialize(state, self.perspective, method, args, kw)
   	observe_*: return broker.serialize(state, None, method, args, kw)

   Can you please explain why remote_* is implemented differently?
   This goes back to before the first import to svn, so I cannot 
   browse the history.


3. They all raise AttributeError for undefined method except remote_*
   which raises MethodNotFound. Both are not documented in the API.
   Could this be unified to MethodNotFound?

   My theory is that svn commit 13473 was incomplete. Commit message was:

	Raise NoSuchMethod instead of AttributeError when call is made to remote_
   	method that doesn't exist


-- 
Wolfgang



More information about the Twisted-Python mailing list