Package foolscap :: Module call :: Class InboundDelivery
[hide private]
[frames] | no frames]

Class InboundDelivery

source code

An inbound message that has not yet been delivered.

This is created when a 'call' sequence has finished being received. The Broker will add it to a queue. The delivery at the head of the queue is serviced when all of its arguments have been resolved.

The only way that the arguments might not all be available is if one of the Unslicers which created them has provided a 'ready_deferred' along with the prospective object. The only standard Unslicer which does this is the TheirReferenceUnslicer, which handles introductions. (custom Unslicers might also provide a ready_deferred, for example a URL slicer/unslicer pair for which the receiving end fetches the target of the URL as its value, or a UnixFD slicer/unslicer that had to wait for a side-channel unix-domain socket to finish transferring control over the FD to the recipient before being ready).

Most Unslicers refuse to accept unready objects as their children (most implementations of receiveChild() do 'assert ready_deferred is None'). The CallUnslicer is fairly unique in not rejecting such objects.

We do require, however, that all of the arguments be at least referenceable. This is not generally a problem: the only time an unslicer's receiveChild() can get a non-referenceable object (represented by a Deferred) is if that unslicer is participating in a reference cycle that has not yet completed, and CallUnslicers only live at the top level, above any cycles.

Instance Methods [hide private]
 
__init__(self, broker, reqID, obj, interface, methodname, methodSchema, allargs) source code
 
logFailure(self, f) source code