def _handle_body_frame(self, body_frame): """Receive body frames and append them to the stack. When the body size matches, call the finish method. :param Body body_frame: The body frame :raises: pika.exceptions.BodyTooLongError :rtype: tuple(pika.frame.Method, pika.frame.Header, str)|None """ self._seen_so_far += len(body_frame.fragment) self._body_fragments.append(body_frame.fragment) if self._seen_so_far == self._header_frame.body_size: return self._finish() elif self._seen_so_far > self._header_frame.body_size: raise exceptions.BodyTooLongError(self._seen_so_far, self._header_frame.body_size) return None
def handler(body_frame): # Make sure it's a body frame if not isinstance(body_frame, Body): raise exceptions.UnexpectedFrameError(body_frame) # Increment our counter so we know when we've had enough seen_so_far[0] += len(body_frame.fragment) # Append the fragment to our list body_fragments.append(body_frame.fragment) # Did we get enough bytes? If so finish if seen_so_far[0] == header_frame.body_size: finish() # Did we get too many bytes? elif seen_so_far[0] > header_frame.body_size: error = 'Received %i and only expected %i' % \ (seen_so_far[0], header_frame.body_size) raise exceptions.BodyTooLongError(error)
def test_body_too_long_error_repr(self): self.assertEqual( repr(exceptions.BodyTooLongError(100, 50)), 'BodyTooLongError: Received too many bytes for a message delivery: ' 'Received 100, expected 50')