def test_as_filelike(): buf = BytesIO(b'hello world') f = as_filelike(buf) if PYX: assert isinstance(f, FileLike) else: assert f is buf assert f.read(5) == b'hello' assert f.read() == b' world'
def test_segments(): header = b('\x03\x00\x00\x00' # 3+1 segments '\x10\x00\x00\x00' # size0: 16 '\x20\x00\x00\x00' # size1: 32 '\x40\x00\x00\x00' # size2: 64 '\x10\x00\x00\x00' # size3: 16 '\x00\x00\x00\x00') # padding payload = b'\x00'*16*8 + b'\x00'*32*8 + b'\x00'*64*8 + b'\x00'*16*8 buf = header + payload f = BytesIO(buf) msg = _load_message(as_filelike(f)) assert f.tell() == len(buf) assert msg._data_offset == 0 assert msg._seg.segment_offsets == (0, 16*8, (16+32)*8, (16+32+64)*8) assert msg._seg.buf == payload
def load(f, payload_type): """ Load a message of type ``payload_type`` from f. The message is encoded using the recommended capnp format for serializing messages over a stream: - (4 bytes) The number of segments, minus one (since there is always at least one segment) - (N * 4 bytes) The size of each segment, in words. - (0 or 4 bytes) Padding up to the next word boundary. - The content of each segment, in order. """ f2 = as_filelike(f) msg = _load_message(f2) return msg._read_struct(0, payload_type)