def read_body(self, body):
        """Handles the response body for this request.

        If the response body includes a result, returns the result unwrapped
        from the response union. If the response contains an exception, raises
        that exception.
        """
        result_spec = self.result_type.thrift_spec

        # raise application exception, if present
        for exc_spec in result_spec[1:]:
            exc = getattr(body, exc_spec[2])
            if exc is not None:
                raise exc

        # success - non-void
        if len(result_spec) >= 1 and result_spec[0] is not None:

            # value expected, but got none
            # TODO - server side should use this same logic
            if body.success is None:
                raise ValueExpectedError(
                    'Expected a value to be returned for %s, '
                    'but recieved None - only void procedures can '
                    'return None.' % self.endpoint
                )

            return body.success

        # success - void
        else:
            return None
Handles the response body for this request.

        If the response body includes a result, returns the result unwrapped
        from the response union. If the response contains an exception, raises
        that exception.