def _encode_data(entry, value, length): if entry.format in (Field.BINARY, Field.HEX): assert isinstance(value, Data) result = value.copy() elif entry.format == Field.TEXT: assert isinstance(value, basestring) try: result = Data(value.encode(entry.encoding)) except UnicodeDecodeError: raise BadEncodingError(entry, value) elif entry.format == Field.INTEGER: assert isinstance(value, (int, long)) if length is None: raise FieldDataError(entry, "Unable to encode integer field " "without explicit length") assert entry.encoding in [Field.BIG_ENDIAN, Field.LITTLE_ENDIAN] if entry.encoding == Field.BIG_ENDIAN: result = Data.from_int_big_endian(value, length) else: result = Data.from_int_little_endian(value, length) elif entry.format == Field.FLOAT: assert entry.encoding in [Field.BIG_ENDIAN, Field.LITTLE_ENDIAN] assert isinstance(value, float) if entry.encoding == Field.BIG_ENDIAN: result = Data.from_float_big_endian(value, length) else: result = Data.from_float_little_endian(value, length) else: raise Exception("Unknown field format of '%s'!" % entry.format) return result