def unpack(cls, data): # we special-case as we need properties unpack class to change according to method_class method_class, data = Octet.unpack(data) weight, data = Octet.unpack(data) body_size, data = LongLong.unpack(data) properties, data = Properties.get_by_class(method_class).unpack(data) return cls(method_class, body_size, properties)
def unpack(cls, data): scale, data = Octet.unpack(data) scale = scale.value value, data = SignedLong.unpack(data) value = value.value sign = 0 if value < 0: sign = 1 value = -value digits = [] while value: digits.append(value % 10) value /= 10 digits = digits[::-1] exponent = -scale return cls(PyDecimal((sign, digits, exponent))), data