def __init__(self, process=None, callback=None, routing_call=None, **kwargs): ProcessEndpointUnitMixin.__init__(self, process=process) SubscriberEndpointUnit.__init__(self, callback=callback, **kwargs) self._routing_call = routing_call
def _make_routing_call(self, call, timeout, *op_args, **op_kwargs): if not self._routing_call: return SubscriberEndpointUnit._make_routing_call(self, call, timeout, *op_args, **op_kwargs) ctx = self._process.get_context() # pull onto the locals here, for debuggability with manhole ar = self._routing_call(call, ctx, *op_args, **op_kwargs) return ar.get() # timeout=timeout) # REMOVED TIMEOUT
def _make_routing_call(self, call, timeout, *op_args, **op_kwargs): if not self._routing_call: return SubscriberEndpointUnit._make_routing_call(self, call, timeout, *op_args, **op_kwargs) ctx = self._process.get_context() ar = self._routing_call(call, ctx, *op_args, **op_kwargs) return ar.get() # timeout=timeout) # REMOVED TIMEOUT
def _make_routing_call(self, call, *op_args, **op_kwargs): if not self._routing_call: return SubscriberEndpointUnit._make_routing_call( self, call, *op_args, **op_kwargs) ar = self._routing_call(call, self._process.get_context(), *op_args, **op_kwargs) return ar.get() # @TODO: timeout?
def _build_header(self, raw_msg, raw_headers): """ Override to direct the calls in _build_header - first the Subscriber, then the Process mixin. """ header1 = SubscriberEndpointUnit._build_header(self, raw_msg, raw_headers) header2 = ProcessEndpointUnitMixin._build_header(self, raw_msg, raw_headers) header1.update(header2) return header1
def _message_received(self, msg, headers): """ Message received override. Sets the process' context here to be picked up by subsequent calls out by this service to other services, or replies. """ ###### ###### THIS IS WHERE THE THREAD LOCAL HEADERS CONTEXT IS SET ###### ###### # With the property _routing_call set, as is the case 95% of the time in the Process-level endpoints, # we have to set the call context from the ION process' calling greenlet, as context is greenlet-specific. # This is done in the _make_routing_call override here, passing it the context to be set. # See also IonProcessThread._control_flow. with self._process.push_context(headers): return SubscriberEndpointUnit._message_received(self, msg, headers)
def _make_routing_call(self, call, *op_args, **op_kwargs): if not self._routing_call: return SubscriberEndpointUnit._make_routing_call(self, call, *op_args, **op_kwargs) ar = self._routing_call(call, self._process.get_context(), *op_args, **op_kwargs) return ar.get() # @TODO: timeout?