'_fillbuffer(timeout = default)
Fills the internal buffer from the pipe, by calling
:meth:`recv_raw` exactly once.
Returns:
The bytes of data received, or ``\'\'`` if no data was received.
Examples:
>>> t = tube()
>>> t.recv_raw = lambda *a: \'abc\'
>>> len(t.buffer)
0
>>> t._fillbuffer()
\'abc\'
>>> len(t.buffer)
3'

def _fillbuffer(self, timeout=default):

    data = ''
    with self.local(timeout):
        data = self.recv_raw(self.buffer.get_fill_size())
    if (data and self.isEnabledFor(logging.DEBUG)):
        self.debug(('Received    %#x    bytes:' % len(data)))
        if ((len(set(data)) == 1) and (len(data) > 1)):
            self.indented(('%r    *    %#x' % (data[0], len(data))), level=logging.DEBUG)
        elif all(((c in string.printable) for c in data)):
            for line in data.splitlines(True):
                self.indented(repr(line), level=logging.DEBUG)
        else:
            self.indented(fiddling.hexdump(data), level=logging.DEBUG)
    if data:
        self.buffer.add(data)
    return data
