def unpack(cls, data): amqp, data = eat(data, 4) if amqp != "AMQP": raise ValueError('Invalid data: Data did not begin with "AMQP"') proto_id, data = eat(data, 1) proto_version, data = eat(data, 3) return cls(proto_id, proto_version), data
def unpack(cls, data): header, data = FrameHeader.unpack(data) payload, data = eat(data, header.size) frame_end, data = eat(data, 1) if frame_end != cls.FRAME_END: raise ValueError("Framing error: Frame ended with {!r}, not {!r}".format(frame_end, cls.FRAME_END)) payload_type = cls.payload_types[header.type] try: payload, leftover = payload_type.unpack(payload) except Incomplete: _, _, tb = sys.exc_info() ex = ValueError("Frame payload reported Incomplete") raise type(ex), ex, tb if leftover: raise ValueError("Payload had excess bytes: {!r}".format(leftover)) return cls(header.type, header.channel, payload), data
def pack(self): first, rest = eat(self.value, 1) if first not in self.FIRSTCHARS: raise ValueError("Illegal character {} as first character of field name".format(first)) for c in rest: if c not in self.CHARS: raise ValueError("Illegal character {} in field name".format(c)) return super(FieldName, self).pack()
def unpack(cls, data): payload, data = LongString.unpack(data) payload = payload.value values = [] try: while payload: type_specifier, payload = eat(payload, 1) field_type = FIELD_TYPES[type_specifier] value, payload = field_type.unpack(payload) values.append(value) except Incomplete: _, _, tb = sys.exc_info() ex = ValueError("FieldArray payload reported Incomplete") raise type(ex), ex, tb return cls(values), data
def unpack(cls, data): payload, data = LongString.unpack(data) payload = payload.value values = {} try: while payload: name, payload = FieldName.unpack(payload) name = name.value type_specifier, payload = eat(payload, 1) field_type = FIELD_TYPES[type_specifier] value, payload = field_type.unpack(payload) values[name] = value except Incomplete: _, _, tb = sys.exc_info() ex = ValueError("FieldTable payload reported Incomplete") raise type(ex), ex, tb return cls(values), data
def unpack(cls, data): length, data = cls.len_type.unpack(data) string, data = eat(data, length.value) return cls(string), data
def unpack(cls, data): data, leftover = eat(data, cls.len()) value, = struct.unpack(cls.struct_fmt(), data) return cls(value), leftover
def decode(cls, data): """Decode message from data and return (message_type, payload, remaining data), or raise Incomplete if more data is needed to complete a message.""" (length, message_type), data = unpack('IB', data) payload, data = eat(data, length) return message_type, payload, data