parameters: (self, size)
return_statement: return b''.join(data)
docstring: Fetch the next N bytes of data from the buffer.
  
      Args:
        size: the amount of data to fetch.
  
      Returns:
        The next size bytes of data, or None if there isn't enough.
docstring_summary: Fetch the next N bytes of data from the buffer.
docstring_tokens: Fetch the next N bytes of data from the buffer .
function: def _GrabData(self, size):
      """Fetch the next N bytes of data from the buffer.
  
      Args:
        size: the amount of data to fetch.
  
      Returns:
        The next size bytes of data, or None if there isn't enough.
      """
      data_size = sum([len(s) for s in self._buffer])
      if data_size < size:
        return None
  
      data = []
      size_left = size
      while size_left > 0:
        chunk = self._buffer.pop(0)
        if len(chunk) > size_left:
          # we only want part of it
          data.append(chunk[0:size_left])
          self._buffer.insert(0, chunk[size_left:])
          size_left = 0
        else:
          data.append(chunk)
          size_left -= len(chunk)
  
      return b''.join(data)
function_tokens: def _GrabData ( self , size ) : data_size = sum ( [ len ( s ) for s in self . _buffer ] ) if data_size < size : return None data = [ ] size_left = size while size_left > 0 : chunk = self . _buffer . pop ( 0 ) if len ( chunk ) > size_left : # we only want part of it data . append ( chunk [ 0 : size_left ] ) self . _buffer . insert ( 0 , chunk [ size_left : ] ) size_left = 0 else : data . append ( chunk ) size_left -= len ( chunk ) return b'' . join ( data )