Esempio n. 1
0
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'
Esempio n. 2
0
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
Esempio n. 3
0
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)