def pack(self): """ Pack message to binary stream. """ payload = io.BytesIO() # Advance num bytes equal to header size - the header is written later # after the payload of all segments and parts has been written: payload.seek(self.header_size, io.SEEK_CUR) # Write out payload of segments and parts: self.build_payload(payload) packet_length = len(payload.getvalue()) - self.header_size self.header = MessageHeader(self.session_id, self.packet_count, packet_length, constants.MAX_SEGMENT_SIZE, num_segments=len(self.segments), packet_options=0) packed_header = self.header_struct.pack(*self.header) # Go back to begining of payload for writing message header: payload.seek(0) payload.write(packed_header) payload.seek(0, io.SEEK_END) trace(self) return payload
def unpack_reply(cls, header, payload): """Take already unpacked header and binary payload of received request reply and creates message instance :param header: a namedtuple header object providing header information :param payload: payload (BytesIO instance) of message """ reply = cls( header.session_id, header.packet_count, segments=tuple(ReplySegment.unpack_from(payload, expected_segments=header.num_segments)), header=header ) trace(reply) return reply
def unpack_reply(cls, header, payload): """Take already unpacked header and binary payload of received request reply and creates message instance :param header: a namedtuple header object providing header information :param payload: payload (BytesIO instance) of message """ reply = cls(header.session_id, header.packet_count, segments=tuple( ReplySegment.unpack_from( payload, expected_segments=header.num_segments)), header=header) trace(reply) return reply
def test_tracing_output(): msg_header = MessageHeader(session_id=5, packet_count=3, payload_length=500, varpartsize=500, num_segments=1, packet_options=0) request = RequestMessage( session_id=msg_header.session_id, packet_count=msg_header.packet_count, segments=RequestSegment( message_types.EXECUTE, Command('select * from dummy') ), header=msg_header ) pyhdb.tracing = True try: trace_msg = trace(request) finally: pyhdb.tracing = False assert trace_msg == TRACE_MSG
def test_tracing_output(): msg_header = MessageHeader(session_id=5, packet_count=3, payload_length=500, varpartsize=500, num_segments=1, packet_options=0) request = RequestMessage(session_id=msg_header.session_id, packet_count=msg_header.packet_count, segments=RequestSegment( message_types.EXECUTE, Command('select * from dummy')), header=msg_header) pyhdb.tracing = True try: trace_msg = trace(request) finally: pyhdb.tracing = False assert trace_msg == TRACE_MSG