Pre-process a request through all processors in the stack, in
        order.  If any processor's proc_request() method returns a
        value other than None, that value is treated as a response and
        post-processed through the proc_response() methods of the
        processors preceding that processor in the stack.  (Note that
        the response returned this way is not passed to the
        processor's proc_response() method.)  Such a response will
        then be attached to a ShortCircuit exception.

        For convenience, returns the request passed to the method.

def proc_request(self, req):
        """
        Pre-process a request through all processors in the stack, in
        order.  If any processor's proc_request() method returns a
        value other than None, that value is treated as a response and
        post-processed through the proc_response() methods of the
        processors preceding that processor in the stack.  (Note that
        the response returned this way is not passed to the
        processor's proc_response() method.)  Such a response will
        then be attached to a ShortCircuit exception.

        For convenience, returns the request passed to the method.
        """

        for idx in range(len(self)):
            resp = _safe_call(self[idx], 'proc_request', req)

            # Do we have a response?
            if resp is not None:
                # Short-circuit
                raise exc.ShortCircuit(self.proc_response(resp, idx - 1))

        # Return the request we were passed
        return req