def handler(header_frame): # Make sure it's a header frame if not isinstance(header_frame, Header): raise exceptions.UnexpectedFrameError(header_frame) # Call the handle body frame including our header frame self._handle_body_frame(frame, header_frame)
def process(self, frame_value): if isinstance(frame_value, frame.Method): if spec.has_content(frame_value.method.INDEX): self._method_frame = frame_value return False, None return True, frame_value elif isinstance(frame_value, frame.Header): self._header_frame = frame_value if frame_value.body_size == 0: return self._finish() return False, None elif isinstance(frame_value, frame.Body): return self._handle_body_frame(frame_value) else: raise exceptions.UnexpectedFrameError(frame_value)
def _handle_method_frame(self, frame): """ Receive a frame and process it, we should have content by the time we reach this handler, set the next handler to be the header frame handler """ # If we don't have FrameMethod something is wrong so throw an exception if not isinstance(frame, Method): raise exceptions.UnexpectedFrameError(frame) # If the frame is a content related frame go deal with the content # By getting the content header frame if spec.has_content(frame.method.INDEX): self._handler = self._handle_header_frame(frame) # We were passed a frame we don't know how to deal with else: raise NotImplementedError(frame.method.__class__)
def process(self, frame_value): """Invoked by the Channel object when passed frames that are not setup in the rpc process and that don't have explicit reply types defined. This includes Basic.Publish, Basic.GetOk and Basic.Return :param Method|Header|Body frame_value: The frame to process """ if (isinstance(frame_value, frame.Method) and spec.has_content(frame_value.method.INDEX)): self._method_frame = frame_value elif isinstance(frame_value, frame.Header): self._header_frame = frame_value elif isinstance(frame_value, frame.Body): return self._handle_body_frame(frame_value) else: raise exceptions.UnexpectedFrameError(frame_value)
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)